Java 输出文件新行未从下一行开始

Java 输出文件新行未从下一行开始,java,junit,output,filewriter,bufferedwriter,Java,Junit,Output,Filewriter,Bufferedwriter,我的空间有问题。 如何正确打印输出文件? 当我运行我的代码时,就像 这就是我的主方法的外观,并生成输出文件 main()....{ File stats = new File(statFile); stats.createNewFile(); // my code here.... the stat values change here. FileWriter statFileWriter = new FileWriter(stats, true); Buffer

我的空间有问题。 如何正确打印输出文件? 当我运行我的代码时,就像

这就是我的主方法的外观,并生成输出文件

main()....{
File stats = new File(statFile);
    stats.createNewFile();

// my code here.... the stat values change here.



    FileWriter statFileWriter = new FileWriter(stats, true);
    BufferedWriter statsOutput = new BufferedWriter(statFileWriter);
    statsOutput.write(Stats.printStat());
    statsOutput.flush();
}
这是一个Stat类,我可以更改程序中的值,并打印带有这些值的字符串

public class Stats {
public static String dataFile = "";
public static int cacheHits = 0;
public static int diskReads = 0;    
public static int diskWrites = 0;
public static long executionTime = 0;

public static String printStat() {
    String print = "";

    print += "Sort on " + dataFile;
    print += "\nCache Hits: " + cacheHits;
    print += "\nDisk Reads: " + diskReads;
    print += "\nDisk Writes: " + diskWrites;
    print += "\nTime is " + executionTime;
    return print;
}
}
这将使输出类似于:

Sort on sorted_b.dat
Cache Hits: 30922
Disk Reads: 1
Disk Writes: 1
Time is 16
Sort on sorted_a.dat
Cache Hits: 62899
Disk Reads: 2
Disk Writes: 2
Time is 0
但当我在testcase中两次运行main时,实际输出是:

Sort on sorted_b.dat
Cache Hits: 30922
Disk Reads: 1
Disk Writes: 1
Time is 16Sort on sorted_a.dat    ------> the new stat is not start from the nextline.
Cache Hits: 62899
Disk Reads: 2
Disk Writes: 2
Time is 0
如果我在末尾添加额外的“/n” 打印+=“\n时间为”+执行时间;这条线,像 打印+=“\n时间为”+执行时间+\n

它将在末尾多出一行,如

Sort on sorted_b.dat
Cache Hits: 30922
Disk Reads: 1
Disk Writes: 1
Time is 16
Sort on sorted_a.dat
Cache Hits: 62899
Disk Reads: 2
Disk Writes: 2
Time is 0
          ------------blank, but extra line.

如何在没有额外行的情况下打印输出并正确打印?

您需要在末尾附加额外的“\n”


在main方法中,只需使用
BufferedWriter
的方法,如下所示:

FileWriter statFileWriter = new FileWriter(stats, true);
BufferedWriter statsOutput = new BufferedWriter(statFileWriter);
statsOutput.write(Stats.printStat());
statsOutput.newLine();

如果愿意,您还可以在写入统计数据之前添加新行。

将主方法更改为:

File stats = new File(statFile);
Boolean fromStart = stats.createNewFile();

// my code here.... the stat values change here.  

FileWriter statFileWriter = new FileWriter(stats, true);
BufferedWriter statsOutput = new BufferedWriter(statFileWriter);
if(fromStart == false) statsOutput.write("\n");
statsOutput.write(Stats.printStat());
statsOutput.flush();
从stats.createNewFile()返回的
Boolean fromStart
将是:

  • true
    如果文件是第一次创建-->无需添加额外的换行符
  • false
    如果文件已存在-->需要在写入新内容之前添加换行符

虽然您还没有发布它,但您可能有一些代码多次将
printStat()
输出到同一个文件中。在连续调用
printStat()
之间输出换行符。编辑以更正换行符打印(doh)的位置
File stats = new File(statFile);
Boolean fromStart = stats.createNewFile();

// my code here.... the stat values change here.  

FileWriter statFileWriter = new FileWriter(stats, true);
BufferedWriter statsOutput = new BufferedWriter(statFileWriter);
if(fromStart == false) statsOutput.write("\n");
statsOutput.write(Stats.printStat());
statsOutput.flush();