Как обработать исключение FileNotFound в SimpleFileVisitor и продолжить выполнение

У меня есть следующий код Java, он работает нормально с одной проблемой. Если есть исключение "FileNotFound" (скажем, когда файл удаляется после запуска программы), программа останавливается, я хотел бы распечатать исключение и продолжить выполнение. Я протестировал программу, и методы preVisitDirectory и visitFile работают нормально, и при срабатывании исключения FileNotFound я получаю сообщение:

"java.io.FileNotFoundException: MyFilename (система не может найти указанный файл) Мое исключение java.io.FileNotFoundException: MyFilename (система не может найти указанный файл)"

и программа останавливается (не заходя внутрь visitFileFailed).

Это мой код:

public class IndexFiles {

public static void IndexFiles(Path sourceDir) throws IOException { 

if (sourceDir == null)
return;


try {
Files.walkFileTree(sourceDir, EnumSet.of(FileVisitOption.FOLLOW_LINKS), Integer.MAX_VALUE, new SimpleFileVisitor<Path>() {


@Override
public FileVisitResult visitFileFailed(Path file, IOException ioex) throws IOException {
    if(ioex instanceof FileNotFoundException){ 
System.out.println("Error1 Indexing file:" + file.toString()+ioex.toString());} 
return FileVisitResult.CONTINUE;
}   

/*
@Override
public FileVisitResult visitFileFailed(Path file, IOException ioex) throws IOException {
System.out.println("Error1 Indexing file:" + file.toString()+ioex.toString());
return FileVisitResult.CONTINUE;
}   
*/  

@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
//System.out.println("preVisitDirectory:" + dir.toString());

//CASE_SENSITIVE
//boolean isfound1= dir.toString().indexOf("temp") !=-1 ? true:false;

//CASE_INSENSITIVE
boolean isfound1=Pattern.compile(Pattern.quote("TEMP"), Pattern.CASE_INSENSITIVE).matcher(dir.toString()).find();

if(isfound1)
return FileVisitResult.SKIP_SUBTREE;
else
return FileVisitResult.CONTINUE;
}


@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
//DO PROCESSING             
return FileVisitResult.CONTINUE;
}


}
);}catch(IOException ioex){
System.out.println("My exception " + ioex.toString());
}    
}}

и это трассировка стека:

at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at org.apache.solr.common.util.ContentStreamBase$FileStream.getStream(ContentStreamBase.java:133)
at org.apache.solr.client.solrj.impl.HttpSolrClient.createMethod(HttpSolrClient.java:454)
at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:239)
at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:230)
at org.apache.solr.client.solrj.SolrClient.request(SolrClient.java:1219)
at soljv2group.soljv2.SolrOperations$1.visitFile(SolrOperations.java:122)
at soljv2group.soljv2.SolrOperations$1.visitFile(SolrOperations.java:1)
at java.nio.file.Files.walkFileTree(Files.java:2670)
at soljv2group.soljv2.SolrOperations.IndexFiles(SolrOperations.java:69)
at soljv2group.soljv2.App.main(App.java:27)

0 ответов

Другие вопросы по тегам