我有这段代码
public class program {
public static void main(String[] args) {
try {
String filePath = (args[0]);
String strLine;
BufferedReader br = new BufferedReader(new FileReader(filePath));
//Read File Line By Line and Print the content on the console
while ((strLine = br.readLine()) != null) {
//System.out.println (strLine);
PrintStream out = new PrintStream(new FileOutputStream( //printing output to user specified text file (command line argument: outputfile)
args[1]+".txt"));
out.print(strLine);
}
//close the streams
br.close();
}
catch(IOException e){
System.err.println("An IOException was caught :"+e.getMessage());
}
}
}
如果我使用java program input.txt输出从命令行调用此程序
如果输入文件内容如下: 你好 嗨 再见
输出文件会打印出来: 再见
它只打印输出的最后一行。
如果不是:
PrintStream out = new PrintStream(new FileOutputStream( //printing output to user specified text file (command line argument: outputfile)
args[1]+".txt"));
out.print(strLine);
我只有
System.out.println (strLine);
在while循环中,然后它会正确地从输入文件到控制台打印每一行。
为什么当我尝试将其打印到另一个文件时,它只打印最后一行?
答案 0 :(得分:2)
不要在每个循环中创建新的PrintStream
。而是在while循环之前创建PrintStream
:
PrintStream out = new PrintStream( ... );
while ((strLine = br.readLine()) != null) {
out.print(strLine);
}
答案 1 :(得分:0)
因为你要覆盖循环中的同一个文件。在循环之外创建不在循环内部的PrintStream,它应该写出所有行!