2014-11-14 22 views
0

我試圖做一個任務,我想不通爲什麼它不會所有收集的數據寫入到一個文本文件。基本上,我需要閱讀所謂的「標記」一個txt文件,輸出它(這它),然後將其分類到兩個文件 - 如果等級低於50就會去fail.txt,如果是50或更大它會把它放在pass.txt中。只需要首先從marks.txt關口,並把它放在pass.txt,一個來自marks.txt我需要的所有8進行排序。的Java不會寫所有提交

這裏是源:

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 2014-11-14 18:40:09

+0

@ njzk2我切換它仍然不能正常工作燁。 – 2014-11-14 18:48:57

+0

閱讀的文檔'FileWriter',你可能要打開的文件中'append'模式 – njzk2 2014-11-14 19:04:20

回答

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

我改變它,它仍然只穿一條線。 – 2014-11-14 18:42:54

+0

剛纔,我試過你發佈的東西,它仍然不工作]: – 2014-11-14 18:46:19

+0

其實我有一個主要的錯誤,所以也許這就是它沒有完全運行循環的原因,所以它不會去那個點? – 2014-11-14 18:50:37

0

嘗試

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

不改變任何東西。 – 2014-11-14 19:09:40