如何在 tex 文件上为 FileOutputStream 换行
how to make a new line on tex file for FileOutputStream
如何为每个循环创建一个新行?我的程序一直在一行中显示所有内容...或者我如何设置 diff class 以从数组
写入数据
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");
}
}
我怀疑您在尝试查看文件时使用了错误的行分隔符:Windows 使用 \r\n
作为行分隔符,*nix 使用 \n
等.
如果您使用文本 editor/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
或其他)代替。
不要使用 DataOutputStream
编写 text 文件。使用 Writer
.
JavaDataOutputStream
的文档说:
A DataOutputStream
lets an application write primitive Java data types to an output stream in a portable way. An application can then use a DataInputStream
to read the data back in.
它用于以可移植的二进制格式编写Java原始类型。不适用于编写 text 文件。
A Writer
但是:
Abstract class for writing to character streams.
为了帮助打印换行符,使用 PrintWriter
:
Prints formatted representations of objects to a text-output stream.
然后 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());
}
这对你有帮助。
System.getProperty("line.separator");
如何为每个循环创建一个新行?我的程序一直在一行中显示所有内容...或者我如何设置 diff class 以从数组
写入数据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");
}
}
我怀疑您在尝试查看文件时使用了错误的行分隔符:Windows 使用 \r\n
作为行分隔符,*nix 使用 \n
等.
如果您使用文本 editor/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
或其他)代替。
不要使用 DataOutputStream
编写 text 文件。使用 Writer
.
JavaDataOutputStream
的文档说:
A
DataOutputStream
lets an application write primitive Java data types to an output stream in a portable way. An application can then use aDataInputStream
to read the data back in.
它用于以可移植的二进制格式编写Java原始类型。不适用于编写 text 文件。
A Writer
但是:
Abstract class for writing to character streams.
为了帮助打印换行符,使用 PrintWriter
:
Prints formatted representations of objects to a text-output stream.
然后 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());
}
这对你有帮助。
System.getProperty("line.separator");