7

我想在我的 Java 项目的资源文件夹中读取文件。我为此使用了以下代码

MyClass.class.getResource("/myFile.xsd").getPath();

我想检查文件的路径。但它给出了以下路径

file:/home/malintha/.m2/repository/org/wso2/carbon/automation/org.wso2.carbon.automation.engine/4.2.0-SNAPSHOT/org.wso2.carbon.automation.engine-4.2.0-SNAPSHOT.jar!/myFile.xsd

我在 Maven 存储库依赖项中获取了文件路径,但它没有获取该文件。我怎样才能做到这一点?

4

6 回答 6

4

您需要提供res文件夹的路径。

MyClass.class.getResource("/res/path/to/the/file/myFile.xsd").getPath();
于 2013-10-01T12:16:31.850 回答
3

您的资源目录在类路径中吗?

您没有在路径中包含资源目录:

MyClass.class.getResource("/${YOUR_RES_DIR_HERE}/myFile.xsd").getPath();
于 2013-10-01T12:16:51.053 回答
1

从资源文件夹构造 File 实例的可靠方法是将资源作为流复制到临时文件中(当 JVM 退出时,临时文件将被删除):

public static File getResourceAsFile(String resourcePath) {
    try {
        InputStream in = ClassLoader.getSystemClassLoader().getResourceAsStream(resourcePath);
        if (in == null) {
            return null;
        }

        File tempFile = File.createTempFile(String.valueOf(in.hashCode()), ".tmp");
        tempFile.deleteOnExit();

        try (FileOutputStream out = new FileOutputStream(tempFile)) {
            //copy stream
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = in.read(buffer)) != -1) {
                out.write(buffer, 0, bytesRead);
            }
        }
        return tempFile;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}
于 2016-02-17T19:27:11.543 回答
0

无法访问其他 maven 模块的资源。所以你需要在你的src/main/resourcesorsrc/test/resources文件夹中提供你的资源 myFile.xsd 。

于 2014-03-28T16:33:01.063 回答
0

路径是正确的,虽然不在文件系统上,但在 jar 内。也就是说,因为 jar 正在运行。永远不会保证资源是文件。

但是,如果您不想使用资源,可以使用zip 文件系统。但是Files.copy,将文件复制到 jar 之外就足够了。修改jar的文件是个坏主意。最好将资源用作“模板”,以便在用户的主(子)目录 ( ) 中制作初始副本System.getProperty("user.home")

于 2015-03-31T12:08:56.727 回答
0

在 maven 项目中,假设我们有一个名为“ config.cnf ”的文件,它的位置如下。

/src
  /main
   /resources
      /conf
          config.cnf

在 IDE (Eclipse) 中,我使用 ClassLoader.getResource(..) 方法访问此文件,但如果我使用 jar 运行此应用程序,我总是遇到“找不到文件”异常。最后,我编写了一个方法,通过查看应用程序的工作位置来访问文件。

public static File getResourceFile(String relativePath)
{
    File file = null;
    URL location = <Class>.class.getProtectionDomain().getCodeSource().getLocation();
    String codeLoaction = location.toString();
    try{
        if (codeLocation.endsWith(".jar"){
            //Call from jar
            Path path = Paths.get(location.toURI()).resolve("../classes/" + relativePath).normalize();
            file = path.toFile();
        }else{
            //Call from IDE
            file = new File(<Class>.class.getClassLoader().getResource(relativePath).getPath());
        }
    }catch(URISyntaxException ex){
        ex.printStackTrace();
    }
    return file;
}  

如果您通过发送“ conf/config.conf ”参数调用此方法,您可以从 jar 和 IDE 访问此文件。

于 2019-01-11T08:34:27.697 回答