2011-03-14 17 views
13

Załóżmy, że nazwa pliku jest w tym URL:Jak sprawdzić istnienie pliku JAR i określonego pliku wewnątrz JAR?

URL file = new URL("jar:file:/path/to/foo.jar!/META-INF/file.txt"); 

Operacja ta prowadzi do IOException jeśli nie ma foo.jar lub nie ma file.txt wewnątrz istniejącego słoika:

import org.apache.commons.io.FileUtils; 
FileUtils.copyURLToFile(file, /* some other file */); 

to możliwe, aby potwierdzić istnienie pliku bez wychwytywania wyjątków?

Odpowiedz

11

Można użyć java.util.jar.JarFile class i użyć metody getJarEntry, aby sprawdzić, czy plik istnieje.

JarFile jar = new JarFile("foo.jar"); 
JarEntry entry = jar.getJarEntry("META-INF/file.txt"); 
if (entry != null) { 
    // META-INF/file.txt exists in foo.jar 
} 
0

Możesz zbadać CLASSPATH i wyszukać słoik samodzielnie. Następnie możesz sam sprawdzić słoik. Myślę, że nie będzie to szybsze niż twoja droga, ani nie będzie łatwiejsze do zrozumienia, więc dlaczego chcesz uniknąć wyjątku?

Nie widzę czegoś złego w korzystaniu z wyjątku.

+0

Wyjątki mają zbyt wiele przyczyn. Łapanie 'java.io.IOException' spowoduje konwersję każdego problemu I/O na sygnał braku pliku' file.txt' w JAR. Nie rozsądny osąd, co? – yegor256

+0

Tak, zgadzam się, jeśli możesz poradzić sobie z brakiem pliku file.txt w słoiku i innymi problemami ze słoikami w inny sposób, może to mieć znaczenie. –

Powiązane problemy