使用java.nio从另一个文件读取后,无法写入文件

时间:2012-01-15 11:46:17

标签: java nio

我正在尝试使用以下代码读取一个.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 个答案:

答案 0 :(得分:3)

当你不再需要它们时,别忘了关闭BufferedWriter和BufferedReader:

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

来自The Java Tutorials

  

缓冲输入流从称为缓冲区的存储区读取数据;   仅当缓冲区为空时,本机输入API才称为 。   类似地,缓冲输出流将数据写入缓冲区,并且   原生输出API仅在缓冲区已满时才会被称为

close()调用你隐式告诉它刷新缓冲区并关闭它......

答案 1 :(得分:1)

另一种选择是将所有数据保存到字符串中,然后使用writer.write(str)将该字符串写下来。这仅适用于数据不大的情况(否则会出现内存不足异常)。 每次添加一行时都应该刷新编写器,以确保一切都在那里:

writer.flush()

答案 2 :(得分:1)

执行flush(),您的编写者在文件上打印文件的内容,以便它可以从已放置的内容中释放缓冲区。