Java IO:使用scanner和printWriter复制文本文件的内容并将它们放在另一个文本文件中

时间:2016-11-14 21:49:58

标签: java file io java.util.scanner printwriter

好的,所以我有一个非常小的程序,我正在设计用于获取文本文件test.txt的内容,并将它们放在另一个空文件testCopied.txt中。诀窍是我想使用Scanner和printWriter,因为我试图更好地理解这些。

以下是我的代码:

import java.io.*;
import java.util.*;

public class CopyA
{
   public static void main(String [] args)
   {
      String Input_filename = args[0];
      String Output_filename = args[1];
      char r = args[2].charAt(0);

      try
      {
         Scanner sc = new Scanner(new File(Input_filename));
         FileWriter fw = new FileWriter(Output_filename);
         PrintWriter printer = new PrintWriter(fw);

         while(sc.hasNextLine())
         {
            String s = sc.nextLine();
            printer.write(s);
         }
         sc.close();               
      }
      catch(IOException ioe)
      {
         System.out.println(ioe);
      }
   }
}

这会编译,但是当我查看testCopied.txt时,它仍然是空白的,并且没有将test.txt的内容传输给它。我究竟做错了什么? Java IO让我很困惑,所以我试图更好地掌握它。任何帮助都非常感谢!

1 个答案:

答案 0 :(得分:1)

您错过了需要添加的flush对象的close()和PrintWriter()

然后使用System.getProperty("line.separator")使用行分隔符,同时将每行写入第二个文件。

您可以参考以下代码:

PrintWriter printer = null;
Scanner sc = null;
try
  {
     String lineSeparator = System.getProperty("line.separator");

     sc = new Scanner(new File(Input_filename));
     FileWriter fw = new FileWriter(Output_filename);
     printer = new PrintWriter(fw);

     while(sc.hasNextLine())
     {
        String s = sc.nextLine()+lineSeparator; //Add line separator
        printer.write(s);
     }
  }
  catch(IOException ioe)
  {
     System.out.println(ioe);
  } finally {
    if(sc != null) {
       sc.close();  
    }
    if(printer != null) {
      printer.flush();
      printer.close();
     }
 }

另外,请确保始终关闭finally块中的资源(您在代码中错过了Scanner对象)。