2017-01-09 5 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(); 

Hallo, jetzt habe ich einen Ein- und Ausgang, das bedeutet ich habe zwei Versuch und zwei catch-Blöcke (es könnte ein Fehler zur vorherige Datei verbinden und in die zweiten Datei zu schreiben). Oder würde ich nur einen Versuch Block benötigen?Werfen und Fangen IOException

Wenn ja, wie/wo würde ich die Try und Catch-Blöcke implementieren?

+0

Es liegt an Ihnen, aber es wird definitiv einfacher sein, einen einzigen Versuch/Fang um das gesamte Snippet zu verwenden. – shmosel

+0

Ah ich verstehe. Wenn ich zwei try-Blöcke verwenden möchte, wie würden sie in diesem Code implementiert werden? – MasterCard

+0

Sie müssten jeden Aufruf umschließen, der 'IOException' in einem try/catch-Block auslöst, und entweder ein boolesches Flag zurückgeben oder ein boolesches Flag setzen, um einen Fehler anzuzeigen, sobald Sie den Block verlassen haben. – shmosel

Antwort

1

Ich würde nur eine verwenden try/catch/finally-Block durch Schreiben:

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(); 
} 

Durch die Verwendung des finally Blockes Sie können sicher sein, dass das Reader und Writer Objekt ist auf jeden Fall geschlossen.

+0

Danke! Was macht getMessage()? – MasterCard

+0

Gibt im Grunde das genaue Stacktrace von wo die Ausnahme in Ihrem Code aufgetreten ist. Weitere Informationen finden Sie unter [JavaDoc] (https://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html#getMessage()) – ByteBiter

+1

'getMessage()' gibt den Stack-Trace nicht zurück . Verwenden Sie 'printStackTrace()' dafür. Außerdem sollten Sie in Ihrem 'finally'-Block auf Null prüfen, falls es während der Konstruktion fehlgeschlagen ist. Oder sehen Sie sich @ DarshanMehtas Antwort für einen bevorzugten Ansatz an. – shmosel

2

würde ich mit try with resources Block von Java 7, empfehlen, wie im Beispiel unten gezeigt, sie kümmert sich der closing von Ressourcen als auch nehmen:

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 
    } 
} 

Here die Dokumentation für try with resources ist.

Verwandte Themen