Не удалось записать в файл, после чтения из другого файла с помощью java.nio - PullRequest
2 голосов
/ 15 января 2012

Я пытаюсь прочитать один файл .java и пытаюсь записать его в другой файл, используя приведенный ниже код.

import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;

public class JavaToHtml
{
    private Path actualPath;
    private Path targetPath;
    private Path sourcePath;

    private BufferedReader reader;
    private BufferedWriter writer;

    public JavaToHtml(String source, String target)
    {
        sourcePath = Paths.get(source);
        sourcePath = sourcePath.toAbsolutePath();
        actualPath = Paths.get(target);
        targetPath = actualPath.toAbsolutePath();

        Charset charset = Charset.forName("US-ASCII");

        try
        {   
            reader = Files.newBufferedReader(sourcePath, charset);
            writer = Files.newBufferedWriter(targetPath, charset);

            String line = null;
            while((line = reader.readLine()) != null)
            {
                            // This thing is working.
                System.out.println(line);
                            // This thing is not working.
                writer.write(line, 0, line.length());
            }
        }
        catch(IOException ioe)
        {
            ioe.printStackTrace();
        }
    }

    public static void main(String[] args)
    {
        new JavaToHtml(args[0], args[1]);
    }
}

Теперь дело в том, что в цикле while я могу читатьисходный файл без проблем, но новый созданный файл (цель) всегда пуст.Более того, компилятор не выдает ошибок ни во время компиляции, ни во время выполнения.Я делаю что-то неправильно ?Пожалуйста, покажи мне немного света, так как это мой первый вопрос.

С уважением

Ответы [ 3 ]

3 голосов
/ 15 января 2012

Не забудьте закрыть BufferedWriter и BufferedReader, когда они вам больше не нужны:

reader.close();
writer.close();

С Учебные руководства по Java :

Буферизованные входные потоки считывают данные из области памяти, известной как буфер; родной API ввода вызывается только тогда, когда буфер пуст . Аналогично, буферизованные выходные потоки записывают данные в буфер, и нативный API вывода вызывается только тогда, когда буфер заполнен .

При вызове close() вы неявно говорите ему очистить буфер и закрыть его ...

1 голос
/ 25 января 2012

Сделайте flush (), ваш писатель, чтобы напечатать содержимое файла в файле, чтобы освободить буфер от уже размещенного содержимого.

1 голос
/ 15 января 2012

Другой вариант - просто сохранить все данные в строку, а затем записать эту строку с помощью writer.write (str). Это работает, только если данные не слишком велики (в противном случае вы получите исключение нехватки памяти). Вы также должны очищать писатель каждый раз, когда добавляете строку, просто чтобы убедиться, что все есть:

writer.flush()
...