2016-05-13 30 views
0

如何为每个循环创建一个新行?我的程序不断对单行显示的一切......或者我怎么可以设置一个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"); 
    } 
    } 
+1

你在记事本中查看'new.txt'吗?如果是这样,你需要使用'“\ r \ n”'作为行分隔符。 –

+0

它与这个问题无关,但我想说这是一个不错的做法,有一个像getStudentFName这样的名字的方法。假设它属于'Student'类,那么你会重复两次(student.getStudentFName')这个单词。没有必要是多余的。 – dabadaba

回答

0

请勿使用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()); 
} 
2

我怀疑你使用了错误的行分隔符,但是你试图查看数据文件: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,或其他)。

+0

我使用了原始代码,如果你在记事本++中打开它,但是当我在记事本中打开它时,它会很好地工作,就像你说的那样,它将所有东西并排写入。我改变了str.writeBytes(“\ n”); as str.writeBytes(“\ r \ n”);它在两位编辑中都能正常工作。 – drJava

0

这可以帮助你。

System.getProperty("line.separator"); 
相关问题