我在maven项目的src / main / resource文件夹中有download.sh文件,我正在通过下面的代码阅读它
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("download.sh").getFile());
当我将其作为独立应用程序运行时,该文件正在读取。
如果我使用jar ex作为应用程序运行: -
java -jar runScript.jar SCHEMA_NAME
/Users/IdeaProjects/RunScript/target/file:/Users/IdeaProjects/RunScript/target/RunScripts.jar!/download.sh“:error = 2,没有这样的文件或目录
当用jar执行时,任何人都可以帮助我从资源中读取文件
我认为当您尝试读取文件时会发生此错误。这是因为jar中的资源不是文件而是流。所以你应该使用
getClass().getResourceAsStream("download.sh");
然后读取该流,例如:
InputStream resourceStream = getClass().getResourceAsStream("download.sh")
BufferedReader br = new BufferedReader(new InputStreamReader(resourceStream));
String line;
while ((line = br.readLine()) != null) {
// do something
System.out.println(line);
}
我认为你没有把你的资源与你的jar包装在一起。请验证您的jar包含资源文件(download.sh)
jar -tvf <yourfile.jar> | grep -i download
资源不是文件。您可以获取他们的URL或输入流,但是您可以做的任何事情都不会将JAR文件中的资源转换为可以与File
一起使用的磁盘上的文件。没有解压缩JAR文件,就是这样。