2012-06-29 312 views
3

目前我使用此解決方案中加載資源:資源加載:如何判斷它是否是一個目錄

URL url = MyClass.class.getClassLoader().getResource("documents/"+path); 
if(url == null) 
    throw new FileNotFoundException(); 

BufferedReader reader = new BufferedReader(
    new InputStreamReader(url.openStream())); 

可悲的是我無法控制path是否是一個文件或目錄。有什麼方法可以確定指定的路徑是否是目錄?我正在尋找獨立於資源加載位置的解決方案(換句話說:從JAR加載資源時,File.isFile不起作用)。

+0

相關http://stackoverflow.com/questions/676097/java-resource-as-file –

回答

0

我使用此代碼從jar中獲取文本文件的名稱。

public String[] getFiles() throws IOException { 
    ArrayList<String> list = new ArrayList<String>(); 
    List<JarEntry> ents = new ArrayList<JarEntry>(); 
    Enumeration<JarEntry> e = null; 

    URL jarp = getLocation(); 
    if (jarp != null) { 
     jar = jarp.getProtocol().equalsIgnoreCase("jar") ? jarp : new URL("jar:" + jarp.toString() + "!/"); 
     JarFile jarf = null; 
     try { 
      jarf = AccessController.doPrivileged(
        new PrivilegedExceptionAction<JarFile>() { 

         @Override 
         public JarFile run() throws Exception { 
          JarURLConnection conn = (JarURLConnection) jar.openConnection(); 
          conn.setUseCaches(false); 
          return conn.getJarFile(); 
         } 
        }); 
     } catch (PrivilegedActionException ex) { 
      Logger.getLogger(LicenseLoader.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     e = jarf.entries(); 
     while (e.hasMoreElements()) { 
      JarEntry je = e.nextElement(); 
      if (!je.isDirectory()) { 
       ents.add(je); 
      } 
     } 
     for (JarEntry ent : ents) { 
      if ((ent.getName().startsWith(pathName)) && (ent.getName().endsWith(".txt"))) { 
       String name = ent.getName().replace(pathName, ""); 
       list.add(name); 
      } 
     } 
    } 
    return list.toArray(new String[list.size()]); 
} 
相關問題