2011-11-23 27 views
0

我有一個遞歸從文件夾中檢索圖片下面的方法:遞歸方法的工作,而調試,但得到的卡住

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

你是對的,在一個罐子裏應該對邏輯沒有影響。我懷疑你看到的差異是由於當你通過IDE運行而運行jar時設置了不同的工作目錄。你可以發佈DirAndImagesFilter的實現嗎?此外,你應該使用file.list(新的DirAndImagesFilter()),因爲listFiles將只返回文件而不是目錄。 – Chris

+1

您打印了嗎? System.getProperty(「user.dir」); 這兩個時間,看看你的工作目錄是什麼? – oguzalb

+0

@Chris你對file.list是正確的。然而,listFiles爲我列出了文件和文件夾的奇怪事情! – Vitalij

回答

2

是的,我遇到過這種事情。我沒有看到您在此發佈的代碼有任何問題。

我的猜測是你正在閱讀來自jar本身的文件。如果是這樣,那就是你的問題。從jar中讀取「文件」不起作用。

SomeClass.class.getResource("myfile") 

這可以通過輸入流的工作來解決,即

SomeClass.class.getResourceAsStream("myfile") 

這是胡亂猜測......希望它有助於:

當您嘗試之類的東西常出現。

+0

不,我正在閱讀不同的位置(從我的桌面) – Vitalij