在Java中,如果可以在while循环中抛出异常,则在try-catch块包围的循环与循环内的try-catch块包围的语句之间存在差异。
例如,以下代码段不同:
代码段1:
try {
for (File file : files) {
FileInputStream fis = new FileInputStream(file);
System.out.println("OK!");
}
}
catch (FileNotFoundException exc) {
System.out.println("Error!");
}
^如果抛出 FileNotFoundException
,此代码段会中断循环。因此,如果无法读取文件,则循环中断,Java将停止读取更多文件。
代码段2:
for (File file : files) {
try {
FileInputStream fis = new FileInputStream(file);
System.out.println("OK!");
}
catch (FileNotFoundException exc) {
System.out.println("Error!");
}
}
^如果抛出异常,此代码段不会中断循环,如果发生异常,代码会捕获异常并继续 files
中的下一个元素。换句话说,它不会停止读取文件。
现在我想要读取某个目录中的某个文件(比如 bananas.xml ),如果该文件是否可读则不予审阅 - 该XML文件是元数据文件,可能不是要运行程序,请阅读相应的目录(香蕉):
File main = new File("/home/MCEmperor/test");
File fruitMeta = new File(main, "bananas.xml");
FileInputStream fruitInputStream = new FileInputStream(fruitMeta); // This code COULD throw a FileNotFoundException
// Do something with the fruitInputStream...
File fruitDir = new File(main, "bananas");
if (fruitDir.exists() && fruitDir.canRead()) {
File[] listBananas = fruitDir.listFiles();
for (File file : listBananas) {
FileInputStream fis = new FileInputStream(file); // This code COULD throws a FileNotFoundException
// Do something with the fis...
}
}
现在,上面代码段中的两行可能会抛出FileNotFoundException
而我不想破坏循环。
现在有一种方法可以制作一个try-catch块,如果抛出异常但捕获两行,但不会破坏for
- 循环?
答案 0 :(得分:4)
这样的事情怎么样?
FileInputStream fruitInputStream = getFileInputStream(fruitMeta);
...
fis = getFileInputStream(file);
private static FileInputStream getFileInputStream(File file) {
try {
return new FileInputStream(file);
catch(FileNotFoundException e) {
return null;
}
}