【问题标题】:how to make a new line on tex file for FileOutputStream如何在 tex 文件上为 FileOutputStream 创建一个新行
【发布时间】:2016-09-10 06:07:02
【问题描述】:

如何为每个循环创建一个新行?我的程序一直在一行中显示所有内容......或者我如何设置差异类来从数组中写入数据

static void writetofile(studentClass[] students)
   {
       try(DataOutputStream str= new DataOutputStream(new FileOutputStream("new.txt"))  )
     {

      for(int i=0;i<students.length;i++)
      {
         str.writeBytes(students[i].getStudentFname()+", ");
         str.writeBytes(students[i].getStudentLname()+" ");
         str.writeBytes(Integer.toString(students[i].getTestSore()));
         str.writeBytes(" ");
         str.writeChar(students[i].getGrade());
         str.writeBytes("\n");


      }
     }
     catch(Exception e)
     {
         System.out.println("Error");
     }
   }

【问题讨论】:

  • 您在记事本中查看new.txt 吗?如果是这样,您需要使用"\r\n" 作为行分隔符。
  • 这与问题无关,但我想说使用名称如getStudentFName 的方法是一种不好的做法。假设它属于Student 类,您将重复两次“学生”一词(student.getStudentFName)。没有必要多余。

标签: java arrays newline fileoutputstream


【解决方案1】:

我怀疑您尝试查看文件时使用了错误的行分隔符:Windows 使用 \r\n 作为行分隔符,*nix 使用 \n 等。

如果您正在使用值得一提的文本编辑器/查看器来查看文件(即不是记事本),但这并不重要 - 它应该检测行分隔符。


您可能会发现使用 java.util.Formatter 比使用 DataOutputStream 更容易(以及增强的 for 循环):

try (Formatter fmt = new Formatter(new FileOutputStream(...)) {
  for (studentClass student : students) {
    fmt.format("%s, %s %d %s%n",
        student.getStudentFname(),
        student.getStudentLname(),
        student.getTestSore(),
        student.getGrade());
  }      
}

请注意,这使用了%n,这是运行代码的平台的特定于平台的行分隔符。如果你想指定一个特定的行分隔符,你可以使用\n(或\r\n,或其他)来代替。

【讨论】:

  • 我使用了原始代码,如果你在记事本++中打开它,效果很好,但是当我按照你所说的在记事本中打开它时,它会并排写入所有内容。我改变了 str.writeBytes("\n");作为 str.writeBytes("\r\n");它在两个编辑器中都能正常工作。
【解决方案2】:

不要使用DataOutputStream 来编写文本 文件。使用Writer

DataOutputStream 的 Javadoc 说:

DataOutputStream 允许应用程序以可移植的方式将原始 Java 数据类型写入输出流。然后应用程序可以使用DataInputStream 重新读取数据。

它用于以可移植的二进制 格式编写Java 原始类型。不适用于编写文本文件。

然而Writer

用于写入字符流的抽象类。

要帮助打印换行符,请使用 PrintWriter:

将对象的格式化表示打印到文本输出流。

那么println()方法会为你写出正确的行终止符。

所以,你的代码应该是:

try (PrintWriter out = new PrintWriter(new FileWriter("new.txt")))
{
    for (Student student : students)
    {
        out.println(student.getStudentFname() + ", " +
                    student.getStudentLname() + " " +
                    student.getTestSore() + " " +
                    student.getGrade());
    }
}

您可以使用格式化版本,printf():

try (PrintWriter out = new PrintWriter(new FileWriter("new.txt"))) {
    for (Student student : students)
        out.printf("%s, %s %d %c%n",
                   student.getStudentFname(),
                   student.getStudentLname(),
                   student.getTestSore(),
                   student.getGrade());
}

【讨论】:

    【解决方案3】:

    这可以帮助你。

    System.getProperty("line.separator");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多