2017-01-09 191 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的文档。