2016-05-13 4 views
0

Как создать новую строку для каждого цикла? Моя программа продолжает отображать все в одной строке ... или как я могу установить дифф класс для записи данных из массивовКак создать новую строку в файле 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.getStudentFName'). Нет необходимости быть избыточным. – dabadaba

ответ

0

Не используйте DataOutputStream, чтобы написать текст файл. Используйте Writer.

Javadoc из DataOutputStream говорит:

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 и т. д.

Если вы используете текстовый редактор/просмотрщик, заслуживающий его соли, чтобы просмотреть файл (то есть не блокнот), это не имеет значения, хотя - он должен обнаружить разделитель линий.


Вы можете найти его проще использовать java.util.Formatter вместо DataOutputStream (и усовершенствованный цикл):

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"); как str.writeBytes ("\ r \ n"); он отлично работает в обоих редакторах. – drJava

0

Это может помочь вам.

System.getProperty("line.separator"); 
Смежные вопросы