ファイルが存在するかどうかをチェックするプログラムを書いています。存在しない場合は作成します。この後、ファイルを読み取ります。スキャナーを作成しようとすると、Eclipseで「未処理のFileNotFoundExceptionエラー」が発生します。コードスニペットは次のとおりです。
if(!NETWORK_FILE.exists()){
try {
NETWORK_FILE.createNewFile();
}catch(IOException e) {
e.printStackTrace();
}
}else{
//"ERROR" IS ON THE LINE BELOW
Scanner read = new Scanner(NETWORK_FILE);
while(read.hasNextLine()) {
String fileSerial = read.nextLine();
if(fileSerial.equals(serial)) {
System.out.println("serial already exists");
return;
}
}
read.close();
}
この直前にファイルを具体的にチェックして作成するので、FileNotFoundExceptionをキャッチするのはかなり無意味だと思います。これを行うための「好ましい方法」はありますか?
あなたの質問は理にかなっています。
ただし、チェックされた例外はこのように機能します。
コンパイラーは、個別の論理処理間で関連付けを行いません。
また、アプリケーションはマルチスレッドであり、ファイルシステムは複数のプロセスで共有されている可能性があることにも注意してください。
一度に存在するファイルは、1秒後には存在しない可能性があります。
この特定のケースでは、たとえばcreateScannerWithExistingFile()
、をスローする特定のメソッドで例外の処理を抽出すると思いますRuntimeException
。このcatch
ステートメントを分離することにより、コードロジック全体がより明確になります。
if (!NETWORK_FILE.exists()) {
...
}
else {
Scanner read = createScannerWithExistingFile(NETWORK_FILE);
while (read.hasNextLine()) {
String fileSerial = read.nextLine();
if (fileSerial.equals(serial)) {
System.out.println("serial already exists");
return;
}
}
read.close();
}
private Scanner createScannerWithExistingFile(File file) {
try {
return new Scanner(file);
} catch (FileNotFoundException e) {
throw new RuntimeException("file " + f + " should exist", e);
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加