PrintStream仅打印输入文件的最后一行

时间:2017-02-17 01:02:34

标签: java printing

我有这段代码

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循环中

,然后它会正确地从输入文件到控制台打印每一行。

为什么当我尝试将其打印到另一个文件时,它只打印最后一行?

2 个答案:

答案 0 :(得分:2)

不要在每个循环中创建新的PrintStream。而是在while循环之前创建PrintStream

PrintStream out = new PrintStream( ... );
while ((strLine = br.readLine()) != null) {
  out.print(strLine);
}            

答案 1 :(得分:0)

因为你要覆盖循环中的同一个文件。在循环之外创建不在循环内部的PrintStream,它应该写出所有行!