java - 资源加载: How to determine if it's a directory

标签 java jar resource-loading

目前我使用这个解决方案来加载资源:

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

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

遗憾的是,我无法控制 path 是文件还是目录。有什么方法可以确定指定的路径是否是目录?我正在寻找一个独立于资源加载位置的解决方案(换句话说:File.isFile 从 JAR 加载资源时将不起作用)。

最佳答案

我使用此代码从 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()]);
}

关于java - 资源加载: How to determine if it's a directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11266016/

相关文章:

java - GZIPOutputStream 与 BufferedOutputStream 的性能

android - 如何使用Javadoc将第三方库添加到Android的Gradle构建脚本中?

java - 如何读取没有 list 的 war/jar 文件

javascript - LESS(动态样式表语言)和资源加载器

java - 调用实例化该类的方法

java - 如何在Java中删除二维数组中的特定行和列?

java - 为 iOS、Android 和桌面开发应用程序

java - OSX 如何让 Shell 脚本将目录更改为脚本所在的目录?

java - 在 Quarkus 中使用 ResourceLoader

java - 这个错误意味着 break 语句中缺少标签 z 是什么意思?