使用java jar

时间:2017-12-21 03:06:28

标签: java maven jar maven-3

我在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,没有这样的文件或目录 < / p>

使用jar

执行时,任何人都可以帮助我从资源中读取文件

3 个答案:

答案 0 :(得分:1)

我认为当您尝试读取文件时会发生此错误。这是因为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);
}

答案 1 :(得分:0)

我认为你没有把你的资源与你的jar包装在一起。请使用

验证您的jar包含资源文件(download.sh)
jar -tvf <yourfile.jar> | grep -i download 

答案 2 :(得分:0)

资源是不是文件。您可以获取其URL或输入流,但您无法执行任何操作会将JAR文件中的资源转换为可用于def k_sequence(seq, k): pointers = [0] * k while True: yield tuple(seq[i] for i in pointers) p = 0 pointers[p] += 1 while pointers[p] == len(seq): pointers[p] = 0 p += 1 if p == len(seq): return pointers[p] += 1 for combo in k_sequence([1,2,3], 3): print(combo) 的磁盘上的文件。没有解压缩JAR文件,即。