2014-11-14 3 views
0

Я пытаюсь выполнить задание, и я не могу понять, почему он не будет записывать все собранные данные в текстовый файл. В основном мне нужно прочитать один .txt-файл с названием «метки», вывести его (что он делает), а затем отсортировать его по двум файлам - если класс меньше 50, он перейдет в файл fail.txt, а если он равен 50 или больше он поместит его в pass.txt. Он берет только первый из проходов из файла marks.txt и помещает его в pass.txt и один из файла marks.txt. Мне нужно, чтобы все 8 были отсортированы.Java wont Пишите все в файл

Вот источник:

import java.io.*; 

public class WriteKONG { 
public static BufferedReader read; 
public static PrintWriter WriteToPass; 
public static PrintWriter WriteToFail; 
public static String line; 


public static void main(String[] args) throws IOException { 
     read = new BufferedReader(new FileReader("src/marks.txt")); 
     WriteToPass = new PrintWriter(new FileWriter("pass.txt")); 
     WriteToFail = new PrintWriter(new FileWriter("fail.txt")); 
     String StudentID; 
     String Course; 
     String MarkS; 
     int Mark; 

     line = read.readLine(); 

     while(line != null) 
     { 
      sort(); 
     } 


} 


public static void sort() throws IOException 
{ 

    read = new BufferedReader(new FileReader("src/marks.txt")); 
    WriteToPass = new PrintWriter(new FileWriter("pass.txt")); 
    WriteToFail = new PrintWriter(new FileWriter("fail.txt")); 
    String StudentID; 
    String Course; 
    String SMark; 
    int Mark; 
    while (line != null) { 
     line = read.readLine(); 
     StudentID = line; 
     System.out.println("StudentID = " + StudentID); 

     line = read.readLine(); 
     Course = line; 
     System.out.println("Course = " + Course); 

     line = read.readLine(); 
     SMark = line; 
     System.out.println("Mark = " + SMark + "\n"); 

     Mark = Integer.valueOf(SMark); 
     if(Mark >= 50) 
     { 
      WriteToPass.println(StudentID); 
      WriteToPass.println(Course); 
      WriteToPass.println(SMark); 
      WriteTopass.close(); 
     } 

     else 
     { 
      WriteToFail.println(StudentID); 
      WriteToFail.println(Course); 
      WriteToFail.println(SMark); 
      WriteToFail.println(line); 
      WriteToFail.close(); 
     } 

    } 

} 
} 

Вот marks.txt:

75676881 
English 
94 
75676883 
Math 
78 
75676885 
Physics 
24 
75676887 
Chemistry 
89 
75676889 
English 
35 
75676891 
History 
24 
+0

вы уверены о 'WriteToPass.println (Smark); WriteToFail.close(); '? – njzk2

+0

@ njzk2 Я переключил его, пока не работает. –

+0

прочитайте документ для 'FileWriter', вы, вероятно, захотите открыть файл в режиме« append » – njzk2

ответ

2

Вы закрываете WriteToFail после первой итерации и никогда близко WriteToPass.

Вы должны закрыть оба файла только после цикла:

line = read.readLine(); 
while (line != null) { 
    StudentID = line; 
    System.out.println("StudentID = " + StudentID); 

    line = read.readLine(); 
    Course = line; 
    System.out.println("Course = " + Course); 

    line = read.readLine(); 
    SMark = line; 
    System.out.println("Mark = " + SMark + "\n"); 

    Mark = Integer.valueOf(SMark); 
    if(Mark >= 50) 
    { 
     WriteToPass.println(StudentID); 
     WriteToPass.println(Course); 
     WriteToPass.println(SMark); 
    } 
    else 
    { 
     WriteToFail.println(StudentID); 
     WriteToFail.println(Course); 
     WriteToFail.println(SMark); 
     WriteToFail.println(line); 
    } 
    line = read.readLine(); 
} 
WriteToPass.close(); 
WriteToFail.close(); 

Я просто заметил, что вы откроете файлы в основном методе, а также в методе сортировки. Я не вижу причин для этого. Ваш главный должен просто позвонить сортировать:

public static void main(String[] args) throws IOException 
{ 
    sort(); 
} 
+0

Я изменил его, и он по-прежнему помещает только одну строку. –

+0

Как раз сейчас, я попробовал то, что вы разместили, и он все еще не работает]: –

+0

На самом деле у меня есть ошибка в главном, так что, возможно, причина в том, что он не полностью работает в цикле, чтобы он не шел до этой точки? –

0

попробовать

WriteToPass = new PrintWriter(new FileWriter("pass.txt",true)); 
+0

Ничего не меняет. –

Смежные вопросы