如何从中加载资源时区分两个同名文件夹? (JAVA)

时间:2017-03-05 21:31:23

标签: java eclipse maven classpath classloader

目标是列出指定文件夹中的所有.properties文件名,然后对其执行某些操作。第一部分是我遇到的问题,因为这些文件夹具有相同的名称。

eclipse 中的 MAVEN 项目具有以下结构:

SubProject_A
      |-src
        |-main
          |-resources
            |-someFolder                     //folder name is the same as in Subproject_B
              |-someResourceBundle.properties
              |-someResourceBundle.properties
SubProject_B
      |-src
        |-main
          |-resources
            |-someFolder                   //folder name is the same as in Subproject_A
              |-someResourceBundle.properties
              |-someResourceBundle.properties

每当我调用(listAllResourceFilesInFolder() - 见下文)时,将列出Subproject_A文件夹中的文件。我不知道如何在Subproject_B中指定同名文件夹?是否有可能只有subproject_A中的文件夹在类路径上(或者至少在第一次出现)。我怎样才能最优雅地解决这个问题?

仅传递文件夹名称作为参数。有没有办法指定完整路径,例如 / Subproject_A / src / main / resources / someFolder

listAllResourceFilesInFolder("someFolder")

方法列出文件夹

中的所有可用资源文件名
private static Set<String> listAllResourceFilesInFolder(String folderName) throws IOException {
    Set<String> filenames = new HashSet<>();
try (
        InputStream in = getResourceAsStream(folderName);
        BufferedReader br = new BufferedReader(new InputStreamReader(in))) {
    String resource;

    while ((resource = br.readLine()) != null) {
        filenames.add(resource);
    }
}

return filenames;
}

private static InputStream getResourceAsStream(String resource) {
final InputStream in = getContextClassLoader().getResourceAsStream(resource);

return in == null ? thisClass.class.getResourceAsStream(resource) : in;
}

private static ClassLoader getContextClassLoader() {
    return Thread.currentThread().getContextClassLoader();
}

0 个答案:

没有答案