我正在使用以下代码片段逐行读取文件并在另一个文件中写入相同的文件。我的输入文件包含大约13000
行但只生成仅12000
行的输出文件
public class FileReadWrite {
public static void main(String args[]) {
FileReader input = null;
BufferedReader br = null;
BufferedWriter printer = null;
try {
input = new FileReader("input.txt");
File output = new File("output.txt");
br = new BufferedReader(input);
printer = new BufferedWriter(new FileWriter(output));
String s;
while((s = br.readLine()) != null){
printer.write(s);
printer.newLine();
}
}
catch(FileNotFoundException e) {
System.err.println("File not found. Please scan in new file.");
}
catch(Exception e)
{
System.err.println("Exception occured"+e);
}
}
添加此代码段后,它可以正常工作
finally{
try
{
input.close();
br.close();
printer.close();
}
catch(Exception e)
{
}
}
有什么原因吗?
答案 0 :(得分:1)
我建议进行二元转移,这有很多优点
\r
或\n
或\r\n
try-with-resource块为您关闭资源/
try (FileChannel from = new FileInputStream(fromFile).getChannel();
FileChannel to = new FileOutputStream(toFile).getChannel()) {
from.transferTo(0, from.size(), to);
} catch (IOException ioe) {
ioe.printStackTrace();
}
答案 1 :(得分:0)
关闭缓冲(实际上是全部)流非常重要。
关闭流时,缓冲的内容将刷新到磁盘 - 导致所有13k记录写入文件。
答案 2 :(得分:0)
每当我们在java中使用文件输入/输出时。该代码使用系统的重要资源进行读写。 由于这个原因,我们必须关闭所有流,在将数据写入任何文件后,我们必须使用方法flush和close,否则可能无法写入所有数据。