0

我正在使用FileWriter该类在 Java 中编写文本文件。

"\n" 不起作用,所以为了克服这个问题,我使用了BufferedWriterclass 及其方法newLine()。它帮助我进入下一行,但是,它总是继续修改我以前的文件。我希望每次运行程序时都会生成一个新文件!

请有人在这方面帮助我。为什么“\n”不起作用?我的问题的可能解决方案是什么?

FileWriter write = new FileWriter ("D:/final project/report.txt", true);
BufferedWriter bufferedWriter = new BufferedWriter (write);

bufferedWriter.write("Current Time : " + hour + ":"+ minute + ":" + second + " " + am_pm);
bufferedWriter.newLine();
bufferedWriter.write("Current Date : " + date + "/"+ (month+1) + "/" + year + "  d/m/y ");
bufferedWriter.newLine();
4

4 回答 4

3

你真的有两个完全正交的问题......

我希望每次运行程序时都会生成一个新文件!

那么目前这就是你创建的方式FileWriter

new FileWriter ("D:/final project/report.txt", true);

那是使用带有append参数的构造函数重载,您将其设置为true...建议您要附加到现有文件

如果您不想附加到现有文件,为什么要指定true该参数?要么指定false,要么只使用没有该参数的重载,并默认覆盖文件。

就个人而言,我强烈建议不要FileWriter直接使用 - 我会使用FileOutputStream包装在 an 中OutputStreamWriter,以便您可以指定编码。否则它将使用平台默认编码,这在 IMO 很少是一个好主意。(当我有选择的时候,我个人倾向于使用 UTF-8。)

为什么“\n”不起作用?

它的工作原理是将\n字符 (U+000A) 写入文件。但是,无论您用来读取该文件的任何内容,都可能不会将其视为换行符 - 因为 Windows 上的换行符通常是\r\n. BufferedWriter.newLine()将使用平台默认换行符,这就是它起作用的原因。

于 2012-05-11T07:11:14.883 回答
2

使用正确的行分隔符:

String lineSep = System.getProperty("line.separator");
于 2012-05-11T07:11:40.617 回答
0

您可以使用 FileOutputStream 并将其包装在 DataOutputStream

    FileOutputStream fo=new FileOutputStream("c:/xyz/report.txt");
    DataOutputStream ds=new DataOutputStream(fo);

    ds.writeBytes("Current Time : " +new Date() );
    ds.writeBytes(System.getProperty("line.separator")+"Current Date : " +new Date() );
于 2012-05-11T07:24:14.790 回答
-1

Java 用回车和换行来终止每一行,而不仅仅是换行。也就是说,Java 使用“\r\n”而不是“\n”终止。

于 2012-05-11T07:12:10.673 回答