我有以下方法来递归检索文件夹中的图像:
private Collection<Image> GetImages(File file) {
Collection<Image> result = new LinkedList<Image>();
if (file.isFile()) {
result.add(new Image(file));
return result;
}
for (File f : file.listFiles(new DirAndImagesFilter())) {
if (f.isDirectory()) {
{
result.addAll(GetImages(f));
}
} else {
result.add(new Image(f));
}
}
return result;
}
这里是DirAndImageFilter代码:
public class DirAndImagesFilter implements FileFilter {
private final static String jpeg = "jpeg";
private final static String jpg = "jpg";
private final static String gif = "gif";
private final static String tiff = "tiff";
private final static String tif = "tif";
private final static String png = "png";
public boolean accept(File file) {
if (file.isDirectory()) {
return true;
}
String extension = getExtension(file);
if (extension != null) {
if (extension.equals(tiff)
|| extension.equals(tif)
|| extension.equals(gif)
|| extension.equals(jpeg)
|| extension.equals(jpg)
|| extension.equals(png)) {
return true;
} else {
return false;
}
}
return false;
}
/*
* Get the extension of a file.
*/
static String getExtension(File f) {
String ext = null;
String s = f.getName();
int i = s.lastIndexOf('.');
if (i > 0 && i < s.length() - 1) {
ext = s.substring(i + 1).toLowerCase();
}
return ext;
}
}
当我从Netbeans运行我的应用程序时,它工作正常,但是当我运行JAR文件(也是由Netbeans生成)时。我的应用程序陷入了这种方法。
据我所知,JAR文件的行为应与Netbeans中运行的应用程序完全相同。或者我在这里遗漏了什么?
答案 0 :(得分:2)
是的,我以前遇到过这类事。我发现你在这里发布的代码没有任何问题。
我的猜测是你正在读取来自jar本身的文件。如果是这种情况,那就是你的问题。从jar中读取“文件”不起作用。
通常会在您尝试以下内容时发生:
SomeClass.class.getResource("myfile")
这可以通过使用输入流来解决,即
SomeClass.class.getResourceAsStream("myfile")
这是一个疯狂的猜测...希望它有所帮助。