抛出和捕获IOException异常
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块?
我只会写通过使用一个的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
块,你可以肯定的是,Reader
和Writer
对象是肯定关闭。
谢谢! getMessage()做什么? – MasterCard
基本上返回代码中发生异常的确切栈跟踪。参见[JavaDoc](https://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html#getMessage()) – ByteBiter
'getMessage()'不返回堆栈跟踪。使用'printStackTrace()'。另外,你应该在'finally'块中检查null,以防在施工过程中失败。或者请参阅@ DarshanMehta的回答,以获得更好的方法。 – shmosel
我会建议使用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
}
}
Here是try with resources
的文档。
这取决于你,但在整个片段中使用单个try/catch肯定会更容易。 – shmosel
啊我明白了。如果我想使用两个try块,它们将如何在此代码中实现? – MasterCard
您需要围绕任何在try/catch块中抛出“IOException”的调用,并且一旦退出块,就返回或设置一些布尔标志来指示失败。 – shmosel