2016-12-23 106 views
0

我正在研究一項功能,使用戶能夠檢查單個學生的評估結果。我使用try和catch,但是當我運行代碼時,系統直接運行到catch部分,並且文件的內容是空白的。我不確定這個問題的原因。這裏是我的代碼:無法在java中編寫txt文件

System.out.println('\n' + "Please enter the Student's uni that you would like to call. Type 'exit' to leave"); 
     String studentInfo = s.nextLine(); 
     if (studentInfo.equalsIgnoreCase("exit")) { 
     userSelection = "exit"; 
             } 

     boolean studentFound = false; 
     for (int i = 0; i < students.size(); i++) { 

     if (studentInfo.equalsIgnoreCase(students.get(i).getStudentUI())) { 
     studentFound = true; 

     try { 
      File singleStudentList = new File(studentInfo + " .txt"); 
      PrintWriter writer = new PrintWriter(singleStudentList); 

      System.out.println(studentUniLists.get(i)); 

      writer.println(studentUniLists.get(students.indexOf(studentInfo))); 
      writer.close(); 
      } catch (Exception e) { 
      System.out.println("Problem writing the file. Please make sure the path is correct"); 
      } 

      } 
     } 

感謝您的幫助!

+8

您不打印出異常消息! e.printStackTrace()。打印出來,編輯問題,並顯示堆棧跟蹤。 – OldProgrammer

+0

如果您的代碼正在直接進入catch,那麼問題可能出在File或PrintWriter的構造函數之一上。查看文檔以查看它們拋出的特定異常:https://docs.oracle.com/javase/8/docs/api/java/io/File.html#File-java.lang.String- https: //docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html#PrintWriter-java.io.File- 據我的經驗,問題可能是你試圖打開的文件doesn 't exists – Antiphon0x

+0

使用'System.out.println(singleStudentList.getCanonicalPath())'來顯示它正在嘗試使用的文件路徑。有可能你的程序沒有在正確的目錄中查找。 –

回答

1

我的直覺是你的錯誤是在這兩行之一:

 System.out.println(studentUniLists.get(i)); 

    writer.println(studentUniLists.get(students.indexOf(studentInfo))); 

您還沒有包含的代碼爲studentUniLists是什麼,所以這裏的一些猜測。

我的猜測是students.indexOf(studentInfo)可能會返回-1,所以當你在List上做studentUniLists.get(-1)時,這會給你一個IndexOutOfBoundsException。你真的應該只捕捉IOException,這樣就可以檢測的地方這種問題

0

指數可能出界,e.g:

System.out.println(studentUniLists.get(i)); 

確定studentUniLists有指標嗎? 由於你寫的沒有輸出,它只是直接捕捉。

正如其他地方所評論的,打印實際的異常有幫助。

0

您發現任何異常,並向控制檯打印這是與文件相關的問題。它不一定是。 我建議你加入你的catch子句e.printStackTrace()來打印真正的問題。其次,您應該考慮避免捕捉異常,因爲它太寬泛。可能值得捕捉與文件問題有關的異常,並使其餘的未被捕獲。

查看文檔 - PrintWriter不會引發錯誤。 Comstructor可能會拋出FileNotFoundException或SecurityException。 CheckErrors是您檢查文件相關錯誤所需的功能。 https://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html#checkError()。但我相信你有非文件相關的問題,如NullPointerException或IndexOutOfBoundsException。

希望這會有所幫助。

0

首先,使用JDK 1.7,當您打開該文件使用嘗試ressources讓JVM做密切的全自動。 新的文件(studentInfo + 「.TXT」) 你總是創建空文件「真.TXT」

File singleStudentList; 

try (singleStudentList = new File(studentInfo + " .txt")) {   

     PrintWriter writer = new PrintWriter(singleStudentList); 

} 

其次,錯誤是由這個越來越三,打印錯誤ex.printStackTrace();