我正在做一个需要使用File I / O的项目。相关代码如下:
Scanner testscn = new Scanner(input).useDelimiter("\n");
testscn.forEachRemaining((scan) -> {
String[] line = scan.split("-");
try {
File img = new File(line[0]);
if (!img.exists()) throw new FileNotFoundException();
test.put(img, line[1].split(","));
} catch (FileNotFoundException e) {
logger.warn("File path " + line[0] + " could not be resolved. Skipping.");
}
});
testscn.close();
抛出FileNotFoundException只是为了将我的执行放到另一条路径上是不好的做法?
答案 0 :(得分:0)
你在做什么会“奏效”。但是,大多数Java程序员可能会同意这是使用异常来实现“正常”流控制的示例。这样编写起来比较简单:
Scanner testscn = new Scanner(input).useDelimiter("\n");
testscn.forEachRemaining((scan) -> {
String[] line = scan.split("-");
File img = new File(line[0]);
if (img.exists()) {
test.put(img, line[1].split(","));
} else {
logger.warn("File path " + line[0] + ": Skipping.");
}
});
testscn.close();
这应该像这样重写,以避免潜在的资源泄漏:
try (Scanner testscn = new Scanner(input).useDelimiter("\n")) {
testscn.forEachRemaining((scan) -> {
String[] line = scan.split("-");
File img = new File(line[0]);
if (img.exists()) {
test.put(img, line[1].split(","));
} else {
logger.warn("File path " + line[0] + ": Skipping.");
}
});
}