2017-01-09 189 views
1
inputFileName = "2.txt"; 
    outputFileName = "3.txt"; 

    inputFile = new BufferedReader(new FileReader(inputFileName)); 
    outputFile = new PrintWriter(new FileWriter(outputFileName)); 

    String lineOfText = inputFile.readLine(); 

    while (lineOfText != null) 
    { 
     if (lineOfText.contains("x")) 
     { 
      lineOfText = lineOfText.replaceAll("x"+ ".*", ""); 
     } 
     outputFile.println(lineOfText); 
     lineOfText = inputFile.readLine(); 
    } 

    inputFile.close(); 
    outputFile.close(); 

您好, 現在我有一個輸入和輸出,這意味着我有兩個嘗試和兩個catch塊(有可能是連接到一個文件,並寫入第二個文件時出錯)。或者我只需要一個嘗試塊?拋出和捕獲IOException異常

如果是這樣,我將如何/在哪裏實施try和catch塊?

+0

這取決於你,但在整個片段中使用單個try/catch肯定會更容易。 – shmosel

+0

啊我明白了。如果我想使用兩個try塊,它們將如何在此代碼中實現? – MasterCard

+0

您需要圍繞任何在try/catch塊中拋出「IOException」的調用,並且一旦退出塊,就返回或設置一些布爾標誌來指示失敗。 – shmosel

回答

1

我只會寫通過使用一個的try/catch /終於塊:

try { 
    inputFile = new BufferedReader(new FileReader(inputFileName)); 
    outputFile = new PrintWriter(new FileWriter(outputFileName)); 
    String lineOfText = inputFile.readLine(); 
    while (lineOfText != null) 
    { 
     if (lineOfText.contains("x")) 
     { 
      lineOfText = lineOfText.replaceAll("x"+ ".*", ""); 
     } 
    outputFile.println(lineOfText); 
    lineOfText = inputFile.readLine(); 
    } 
} catch(IOException ioe) { 
     System.err.println("Caught IOException: " + e.getMessage()); 
} finally { 
    if(inputFile != null) 
     inputFile.close(); 
    if(outputFile != null) 
     outputFile.close(); 
} 

通過使用finally塊,你可以肯定的是,ReaderWriter對象是肯定關閉。

+0

謝謝! getMessage()做什麼? – MasterCard

+0

基本上返回代碼中發生異常的確切棧跟蹤。參見[JavaDoc](https://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html#getMessage()) – ByteBiter

+1

'getMessage()'不返回堆棧跟蹤。使用'printStackTrace()'。另外,你應該在'finally'塊中檢查null,以防在施工過程中失敗。或者請參閱@ DarshanMehta的回答,以獲得更好的方法。 – shmosel

2

我會建議使用Java 7的try with resources塊,如圖下面的例子中,這將需要的資源closing護理以及:

public static void main(String[] args) throws Exception { 
    String inputFileName = "2.txt"; 
    String outputFileName = "3.txt"; 
    try (BufferedReader inputFile = new BufferedReader(new FileReader(inputFileName)); 
      PrintWriter outputFile = new PrintWriter(new FileWriter(outputFileName));) { 
     String lineOfText = inputFile.readLine(); 

     while (lineOfText != null) { 
      if (lineOfText.contains("x")) { 
       lineOfText = lineOfText.replaceAll("x" + ".*", ""); 
      } 
      outputFile.println(lineOfText); 
      lineOfText = inputFile.readLine(); 
     } 
    }catch(Exception e){ 
     //Handle 
    } 
} 

Heretry with resources的文檔。