如何在tex文件上为FileOutputStream创建一个新行
如何为每个循环创建一个新行?我的程序不断对单行显示的一切......或者我怎么可以设置一个diff类写从阵列如何在tex文件上为FileOutputStream创建一个新行
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");
}
}
请勿使用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());
}
我怀疑你使用了错误的行分隔符,但是你试图查看数据文件:Windows使用\r\n
作为行分隔符,* nix中使用\n
等
如果您在使用文本编辑器/ viewier称职查看该文件(即不记事本),这不应该的问题,虽然 - 它应该检测行分隔符。
你可能会发现它更容易使用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”); as str.writeBytes(“\ r \ n”);它在两位编辑中都能正常工作。 – drJava
这可以帮助你。
System.getProperty("line.separator");
你在记事本中查看'new.txt'吗?如果是这样,你需要使用'“\ r \ n”'作为行分隔符。 –
它与这个问题无关,但我想说这是一个不错的做法,有一个像getStudentFName这样的名字的方法。假设它属于'Student'类,那么你会重复两次(student.getStudentFName')这个单词。没有必要是多余的。 – dabadaba