当前位置: 首页 > 面试题库 >

Java Jar文件:使用资源错误:URI不分层

宇文和昶
2023-03-14
问题内容

我已将我的应用程序部署到jar文件。当我需要将数据从一个资源文件复制到jar文件外部时,请执行以下代码:

URL resourceUrl = getClass().getResource("/resource/data.sav");
File src = new File(resourceUrl.toURI()); //ERROR HERE
File dst = new File(CurrentPath()+"data.sav");  //CurrentPath: path of jar file don't include jar file name
FileInputStream in = new FileInputStream(src);
FileOutputStream out = new FileOutputStream(dst);
 // some excute code here

我遇到的错误是:URI is not hierarchical。在IDE中运行时,我不会遇到此错误。

如果我将上述代码更改为对StackOverFlow上其他帖子的一些帮助,请执行以下操作:

InputStream in = Model.class.getClassLoader().getResourceAsStream("/resource/data.sav");
File dst = new File(CurrentPath() + "data.sav");
FileOutputStream out = new FileOutputStream(dst);
//....
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) { //NULL POINTER EXCEPTION
  //....
}

问题答案:

你不能做这个

File src = new File(resourceUrl.toURI()); //ERROR HERE

它不是文件!从ide运行时,不会有任何错误,因为你没有运行jar文件。在IDE中,类和资源被提取到文件系统上。

但是你可以通过InputStream以下方式打开一个:

InputStream in = Model.class.getClassLoader().getResourceAsStream("/data.sav");

删除"/resource"。通常,IDE在文件系统类和资源上分开。但是创建jar时,它们会全部放在一起。因此,文件夹级别"/resource"仅用于类和资源分离。

当从类加载器中获取资源时,必须指定该资源在jar中的路径,即真正的包层次结构。



 类似资料:
  • 我使用grails已经快一年了。从现在开始,我想在gsp中链接css或js文件。我做了以下几件事: > 我在web-app文件夹下创建了一个新文件(例如资源文件),并将所有文件夹放在那里(例如导入bootstrap时,我在资源下有一个父文件夹bootstrap,在bootstrap下有css、img和js文件夹及其文件)。 然后,为了导入一个css文件,我做了以下操作(以下是相关文档): 这非常有

  • 问题内容: 在Java中,我可以为位于硬盘驱动器本地的文件创建URI吗?如果是这样,应该如何构造? 问题答案: 查看文件文档: File具有构造函数,该构造函数将URI作为参数,并且如果您想从现有文件中获取URI ,它也具有方法。您可以玩这个游戏,以了解应该如何做。 您还可以阅读有关URI(不是Java术语)的信息。维基百科中有一个示例: 文件:///home/username/RomeoAndJ

  • 我写了一个程序,但当我的朋友尝试执行它时,它抛出filenotfound异常,但文件存在,这是我的代码,在文件夹中有lib文件夹、jar文件和“csv fajlok”,在csv fajlok文件夹中有2个csv文件

  • 默认情况下 Nuxt 使用 vue-loader、file-loader 以及 url-loader 这几个 Webpack 加载器来处理文件的加载和引用。对于不需要通过 Webpack 处理的静态资源文件,可以放置在 static 目录中。 Webpack 构建 默认情况下, vue-loader自动使用 css-loader 和Vue模板编译器来编译处理vue文件中的样式和模板。在此编译过程中

  • 警告:不推荐使用属性,它对生成过程没有影响。/home/midhilaj/.gradle/caches/transforms-1/files-1.1/appcompat-v7-26.1.0.aar/be3106efb0df111fe5a3f7b356dd070b/res/values/values.xml错误:(246,5)错误:resource android:找不到attr/fontvaria

  • 大家晚上好。我是一个使用Java编程的完全初学者,我正在学习“扫描仪”,但是当我在Eclipse中键入这个基本代码时,我收到一条消息说“资源泄漏:‘扫描仪’永远不会关闭。 我做错了什么?