好的,所以我有一个非常小的程序,我正在设计用于获取文本文件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让我很困惑,所以我试图更好地掌握它。任何帮助都非常感谢!
答案 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对象)。