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

使用相对路径在JAR中读取文件

龙承德
2023-03-14
问题内容

我的程序需要读取一些文本配置文件。我当前的代码是:

protected File getConfigFile() {
    URL url = getClass().getResource("wof.txt");
    return new File(url.getFile().replaceAll("%20", " "));
}

当我在eclipse中本地运行它时,此方法有效,尽管我确实必须进行破解以处理路径名中的空间。配置文件与上述方法位于同一软件包中。但是,当我将应用程序导出为jar时,出现了问题。该jar位于共享的映射网络驱动器Z:上。当我从命令行运行应用程序时,出现此错误:

java.io.FileNotFoundException:文件:\ Z:\ apps \ jar \ apps.jar!\ vp \ fsm \
configs \ wof.txt

我该如何工作?我只想告诉Java读取与当前类位于同一目录中的文件。

谢谢乔纳


问题答案:

当文件位于jar中File时,由于它是jar:URI
,因此无法使用该类来表示它。相反,URL类本身已经使您openStream()可以读取内容。

或者,您可以使用getResourceAsStream()代替来捷径getResource()

要获得BufferedReader(由于它具有readLine()方法,因此更易于使用),请使用通常的流包装:

InputStream configStream = getClass().getResourceAsStream("wof.txt");
BufferedReader configReader = new BufferedReader(new InputStreamReader(configStream, "UTF-8"));

代替“ UTF-8”,使用文件实际使用的编码(即您在编辑器中使用的编码)。

还有一点:即使您只有file:URI,也不应自己使用URL进行文件转换,而应使用new File(url.toURI())。这也适用于其他有问题的字符。



 类似资料:
  • 本文向大家介绍C#中winform使用相对路径读取文件的方法,包括了C#中winform使用相对路径读取文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#中winform使用相对路径读取文件的方法。分享给大家供大家参考。具体分析如下: 目录结构如下图所示:   方法一:由于生成的exe文件在bin\debug目录下,可以使用向上查找目录的方式获取要读取的xml文件 方法二:获取

  • V1.1.1新增 sp_asset_relative_url($asset_url) 功能: 获取文件相对路径 参数: $asset_url:文件URL 返回 类型字符串,带协议的绝对地址直接返回原来的值,否则会转化为相对于系统upload 目录的文件路径 实例 <?php $file='/data/upload/1.png';//文件路径 $path=sp_asset_relative_url

  • 问题内容: 我们在量角器上进行了大量的端到端测试。我们正在遵循Page Object模式,这有助于我们保持测试的清洁和模块化。我们还有一组帮助程序功能,可以帮助我们遵循DRY原理。 问题: 单个规范可能需要多个页面对象和帮助程序模块。例如: 你可以看到,我们有一个目录遍历在每一个需要声明:。这是因为我们有一个目录,其中将规范和多个目录存放在受测试的应用程序功能分组下。 问题: 解决量角器中相对路径

  • 问题内容: 这是我想做的,我想知道是否有任何Spring类可以帮助实现。对于这个特定的问题,我不必使用spring,我只是将其与其他所有东西一起实现。 在我的DAO层中,我想外部化我的sql文件,也就是每个文件1个sql。我想读取并缓存sql语句,甚至可能作为spring bean单例。但是在我最初的挣扎中,我只是在类路径中加载一个sql文件时遇到问题… 春天有什么可以帮助您的吗?我已经阅读过文档

  • 我正试图使用MacOS“scheduler”执行一些Java代码。 我的plist文件: 剧本上海: 问题是,我在程序中的所有相对路径(资源路径、属性、日志位置、Springbean文件等)都失败了。 plist文件位于根文件夹下,因此我假设所有路径都是相对于执行器位置的。

  • 我只是在尝试IntelliJ IDE,我想在java项目中添加一个外部jar。 我已经在