我有一个可执行的JAR,其中有一个文件,我想从代码中打开java.io.File实例(不是InputStream或其他任何东西......只是文件)。
它是一个maven项目,文件位于" src / main / resources / file.xxx"的根目录。 打包后,该文件位于jar的根目录下(验证它在那里)。
我的第一次尝试:FileNotFoundException
java.io.File myFile = new java.io.File("file.xxx");
someMethodThatUsesTheFile(myFile); //I really need it to be a file!!!
其他尝试:FileNotFoundException
java.io.File myFile = new java.io.File("/file.xxx");
java.io.File myFile = new java.io.File("classpath:file.xxx");
java.io.File myFile = new java.io.File("classpath:/file.xxx");
我不确定最近会发生什么。 Web应用程序可以轻松地从webapp根目录加载所有内容,我很困惑为什么JAR应用程序的行为不同。
其他信息:
答案 0 :(得分:0)
简答:这不是"文件",所以你不能这样做。
JAR文件是文件,但不是其内容。
替代方案是:
尝试该方法的其他重载版本,InputStreams 通常是您的选项,您可以使用以下代码加载它:
InputStream is = getClass()。getResourceAsStream(" file.xxx");
将该文件移出JAR并进入JAR的同一目录(考虑安全风险)
答案 1 :(得分:-2)
试试这个可以帮到你:
URL url = this.getClass().getResource("src/main/resources/file.xxx");
File file= new File(url.toURI());