2014-09-30 65 views
0

這是我第一次嘗試在文件寫入過程中將數據保存到一個java程序中,並且我在這裏找到了這個解決方案,但是當我試圖在最終語句中出現錯誤時關閉PrintWriter,說出「無法解決」。 非常感謝。嘗試關閉文本編寫器時出錯

import java.io.FileNotFoundException; 
    import java.io.PrintWriter; 


public class MedConcept { 

    public static void main(String[] args) { 
     ConsoleReader console = new ConsoleReader(System.in); 
     try { 
      PrintWriter out = new PrintWriter("med.txt"); 
      System.out.println("Name of the medication:"); 
      String medName = console.readLine(); 

      System.out.println("The Dosage of the medication:"); 
      Double medDose = console.readDouble(); 

      System.out.println("Time of day to take"); 
      String dayTime = console.readLine(); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     }finally{ 
      out.close(); 
     }  

    } 

} 
+3

您正在try-block內部進行定義,它不在finally塊的範圍內。在try塊之前定義出來。如有必要,用'null'初始化它。 – 2014-09-30 20:13:48

+0

當我在try-block外面的時候,catch語句給了我一個錯誤,告訴我:「FileNotFoundException的無法到達的catch塊,這個異常永遠不會從try語句體中拋出」@KuluLimpa – sirnomnomz 2014-09-30 20:15:07

回答

4

可變outtry塊,其不處於finally塊可見內部聲明。將聲明移到外面,並在關閉時檢查它是否爲空。

PrintWriter out = null; 
    try { 
     out = new PrintWriter("med.txt"); 
     System.out.println("Name of the medication:"); 
     String medName = console.readLine(); 

     System.out.println("The Dosage of the medication:"); 
     Double medDose = console.readDouble(); 

     System.out.println("Time of day to take"); 
     String dayTime = console.readLine(); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }finally{ 
     if(out != null) { 
      out.close(); 
     } 
    } 

如果您使用的是Java 7,您可以避免與try-with-resources語句手動關閉PrintWriter

try (PrintWriter out = new PrintWriter("med.txt")) { 
    ... 
} catch() { 
    ... 
} 
+1

+1提到try-與資源 – 2014-09-30 20:16:25