我正在尝试使用以下代码读取一个.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循环中,我能够读取源文件而没有任何问题,但创建的新文件(目标)始终为空。此外,编译器在编译时和运行时都不会抛出任何错误。难道我做错了什么 ?请给我一些启示,因为这是我的第一个问题。
此致
答案 0 :(得分:3)
当你不再需要它们时,别忘了关闭BufferedWriter和BufferedReader:
reader.close();
writer.close();
缓冲输入流从称为缓冲区的存储区读取数据; 仅当缓冲区为空时,本机输入API才称为 。 类似地,缓冲输出流将数据写入缓冲区,并且 原生输出API仅在缓冲区已满时才会被称为 。
用close()
调用你隐式告诉它刷新缓冲区并关闭它......
答案 1 :(得分:1)
另一种选择是将所有数据保存到字符串中,然后使用writer.write(str)将该字符串写下来。这仅适用于数据不大的情况(否则会出现内存不足异常)。 每次添加一行时都应该刷新编写器,以确保一切都在那里:
writer.flush()
答案 2 :(得分:1)
执行flush(),您的编写者在文件上打印文件的内容,以便它可以从已放置的内容中释放缓冲区。