我正在尝试将文件打印到文本文件中。虽然我已设法使其工作,但它只打印出控制台上打印的最后一行。例如。我的控制台有大约8000行,但它只打印出文本文件中的最后一行,我想将所有行打印到文本文件中。 这是代码:
try {
BufferedReader reader = new BufferedReader(new FileReader("JDT.txt"));
Writer output = null;
File file = new File("output.txt");
output = new BufferedWriter(new FileWriter(file));
String line = reader.readLine();
int count=0;
while(line !=null)
{
for(int i = 0 ; i<faults.length;i++){
if(line.contains(faults[i]))
System.out.println(line);
count++;
output.write(line +"Total: "+count);
//System.out.println("File Written");
}
line=reader.readLine();
}
System.out.println("Printed Lines =" +count);
output.close();
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
先谢谢你。
答案 0 :(得分:2)
您正在每个循环中重新创建和覆盖您的文件。在循环之前创建文件和BufferedWriter
,并在循环结束后关闭它。
答案 1 :(得分:1)
您应该将这些行放在while
循环的开头。
Writer output = null;
File file = new File("output.txt");
output = new BufferedWriter(new FileWriter(file));
在while循环退出后关闭Writer
。
output.close();
语句output.write(line +"Total: "+count);
也试图在另一行的末尾写入每一行,从而产生一个大的输出行。替换为:
output.write(line + "Total: " + count + "\n");
这会导致每一行打印在一个新行上。
不确定是否符合预期,但在您的代码中output.write
可能会多次执行同一行,具体取决于faults
变量的长度。这将导致同一行被多次打印。
如果faults
的长度为n
,则write
的{{1}}将被称为同一n
的{{1}}次。
我认为你需要这个:
line
答案 2 :(得分:1)
我以为我会把它放在这里供参考。这只是将输入文件中的行复制到输出文件的一般方法。
final class Sample
{
private static final String inputFile = "input_file.txt";
private static final String outputFile = "output_file.txt";
public void start()
{
BufferedReader bufferedReader;
BufferedWriter bufferedWriter;
try
{
bufferedReader = new BufferedReader(new FileReader(inputFile));
bufferedWriter = new BufferedWriter(new FileWriter(outputFile));
copyContents(bufferedReader, bufferedWriter);
bufferedReader.close();
bufferedWriter.close();
}
catch (final IOException e)
{
e.printStackTrace();
}
}
private void copyContents(final BufferedReader bufferedReader, final BufferedWriter bufferedWriter)
{
try
{
String line = bufferedReader.readLine();
while (null != line)
{
bufferedWriter.write(line + '\n');
line = bufferedReader.readLine();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}