2013-05-02 105 views
1

我有一些麻煩讓java識別我的PrintWriter對象'出'。我不確定問題是什麼。Java:PrintWriter對象未檢測到

public void storeInput(String fileName) 
{ 
    String folderName = "C:/temper/testy/"; 

    File filetest = new File(folderName, fileName); 

    System.out.println("ENTER TEXT!!!!!"); 
    String input = sc.nextLine(); 

    try { 
     PrintWriter out = new PrintWriter(
       new BufferedWriter(
       new FileWriter(filetest))); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 


    out.println(filetest); 

    out.close(); 


} 

回答

2

聲明的try

PrintWriter out = null; 
try { 
     out = new PrintWriter(
       new BufferedWriter(
       new FileWriter(filetest))); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
2

該外的out變量的範圍是目前只能在try塊的範圍。在try塊之前聲明它,以便在塊結束後可用。

您需要將其初始化爲null,這樣您纔不會收到「變量可能未被初始化」的錯誤。然後當你試圖通過try塊時,你需要測試它是否爲null

0

PrintWriter out僅在try塊內可見。從外部訪問它將導致編譯錯誤。

您可以將它的聲明中try塊之外,使其成爲你情況下,在功能storeInput的洞身可見,但那麼你就必須檢查statments之前IST是否已初始化

out.println(filetest); 
out.close(); 

或更好的你移動這些在try塊這兩個語句,所以當沒有例外accours out始終初始化。

對於close,最好將它放在finally塊內,這樣無論發生什麼異常,您總是可以釋放資源。

public void storeInput(String fileName) 
{ 
    String folderName = "C:/temper/testy/"; 

    File filetest = new File(folderName, fileName); 

    System.out.println("ENTER TEXT!!!!!"); 
    String input = sc.nextLine(); 
    PrintWriter out = null; 
    try { 
     out = new PrintWriter(
       new BufferedWriter(
         new FileWriter(filetest))); 

     out.println(filetest); 

    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } finally { 
     if(out != null) { 
      out.close(); 
     } 
    } 
}