如何在Java文件中指定相对文件路径,以便将文件放入jar文件后仍然可以工作?

2024-05-13

假设我有一个Java类需要使用绝对路径访问文件 /home/gem/projects/bar/resources/test.csv:

package com.example
class Foo {
String filePath = ????? // path to test.csv
String lines = FileInputStream(new File(filePath).readAllLines();

}

其中 Foo.java 的路径是 /home/gem/projects/bar/src/com/example。

当然我不能指定资源文件的绝对路径。这是因为 jar 文件将作为库分发,供任何客户端在自己的环境中使用。

假设像 test.csv 这样的资源文件始终位于相对于项目根目录的同一路径中。当创建包含 Foo.class 的 jar 时,该 jar 还在同一相对路径(相对于项目根目录)中包含 test.csv。

无论项目栏移动到哪里,指定相对路径都有效的方法是什么?另外,如何创建一个 jar 文件(可以位于任何位置),以便资源文件 test.csv 的路径仍然正确。

为了简单起见,我使用了无效的 Java API( readAllLines() ,它读取所有行并返回包含整个文件内容的字符串。也不使用 try/catch )。

假设 csv 文件可以读取和写入。

我希望现在一切都清楚了。


Put the test.csv文件到src文件夹并使用它:

Foo.class.getResourceAsStream("/test.csv")

为了得到一个InputStream对于该文件。无论项目移动到哪里,这都将起作用,包括打包为 JAR 文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Java文件中指定相对文件路径,以便将文件放入jar文件后仍然可以工作? 的相关文章

随机推荐

  • 我可以在字段构造函数之外设置 StringField 的默认值吗?

    如果我在构建字段期间设置默认值 则一切都会按预期工作 my field StringField My Field default default value validators Optional Length 0 255 但是 如果我尝试
  • HtmlAgilityPack - 获取文档中的所有节点

    我想使用 HtmlAgilityPack 遍历文档中的所有节点 将要 foreach HtmlNode node in myhtml DocumentNode SelectNodes do 你可以循环遍历myhtml DocumentNod
  • 同时运行 Gremlin-Server 和 NEO4J Server

    目前看来我们不能同时运行两者Neo4J服务器 and Gremlin服务器同时 有什么办法可以同时运行两者吗 NEO4J 正在运行 我尝试启动 Gremlin Server 然后出现以下错误 java lang RuntimeExcepti
  • 链和主证书添加之间 X509 结构的正确释放是否有所不同?

    我需要从内存中添加 PEM 类型证书 这意味着我无法使用内置的从文件读取帮助程序 我的问题是没有关于如何释放内存的文档 现在我最好的猜测如下 SSL CTX use certificate X509 structure SHOULD be
  • Autowired spring bean 不是代理

    我正在开发一个连接到 MySQL 数据库的非常小的应用程序 我正在尝试创建表记录 但收到 没有正在进行的事务 我已经准备好了所有正确的东西 服务接口 MyService 及其实现 MyServiceImpl 我已经用 Service 注释了
  • Chrome 在展开时显示不同的对象内容

    为什么 Chrome 会根据对象视图是否展开而显示两个不同的数据集 在收缩视图中 我的对象有两个属性 在展开视图中 我的对象具有三个属性 您在控制台中看到的对象是该对象在特定时间点 即您记录该对象的时间 的快照 当您展开对象时 它将再次评估
  • 如何使用jmeter统计失败的请求

    我在跑步JMeter我想要统计所有失败的请求 这些请求要么超时 要么只是失败 我看到一些侦听器显示出现了失败 但没有人看到有一个字段显示失败请求与成功请求的总数 有谁知道我如何轻松获取这些数据而不必手动计算每次失败 要检查失败响应的数量 请
  • 使用 IQueryable 进行单元测试代码

    我被要求为某些功能编写一些单元测试 但坦率地说 我不太确定这样做的必要性或有用性对于这个特殊的一段代码 我绝不试图质疑单元测试的必要性或有用性 所讨论的代码非常简单并且被大量使用 基本上它是 Skip 和 Take 扩展方法的包装 在我看来
  • 在 C++ 中引入引用的根本原因是什么?

    从我最近的问题中发生的讨论来看 为什么 C 引用被认为比指针更安全 https stackoverflow com questions 4715740 why is a c reference considered safer than a
  • 如何在 Android '/data/data/pkg/files' 目录中创建文件层次结构?

    我尝试在 Android 的 data data pkg files 目录中创建 foo bar txt 这似乎是文档中的矛盾 要写入文件 请使用名称和路径调用 Context openFileOutput http developer a
  • pytest.raises(Error) 如何工作?

    对 Python 来说是新手 但我试图理解这段代码 with pytest raises ValueError group adjust vals grps 1 grps 2 weights 看完之后本教程与 http effbot org
  • 根据外形尺寸更改入口点类别

    如果用户从移动 Web 浏览器或桌面 Web 浏览器访问 我希望在我的 GWT 应用程序中加载不同的用户界面 我想知道如何编辑我的 Application gwt xml 文件 更改根据外形规格加载哪个入口点类 我认为这可能是这样的 但我只
  • gethostbyname() 或 getnameinfo() 如何在后台工作?

    How gethostbyname or getnameinfo 在后台工作 include
  • 将项目移动到 Eclipse 中的另一个文件夹

    我通常将工作项目放在桌面上的文件夹中 当它们完成后 我只是将它们移动到c dev 问题是我正在以一种相当古老的方式做这件事 1 move project files 2 delete project on Eclipse 3 create
  • 使用 React-navigation 的 React Native 中的模态窗口

    我在用react navigation在 React Native 中 我想在启动时确定用户是否已登录 如果他 她已经登录 我想打开一个模式窗口 全屏 如何最好地做到这一点 我在反应导航文档中找不到有条件显示屏幕的任何内容 看 你需要改变m
  • $_COOKIE[] 设置后似乎没有反映更改

    我不记得过去使用 Cookie 时遇到过很多问题 但我在尝试时遇到了一些意想不到的结果 我在本地主机上运行 因此我的域设置 这将产生以下输出 Cookie Set Cookie equals 457718770 shou
  • 更改 Spark SQL 中的 Null 顺序

    我需要能够按升序和降序对列进行排序 并且还允许空值位于第一个或空值位于最后一个 使用 RDD 我可以将 sortByKey 方法与自定义比较器结合使用 我想知道是否有使用 Dataset API 的相应方法 我了解如何将 desc asc
  • 抓取内存中的 .net 进程

    我正在尝试保护我用 C 编写的中小型 MMO 但我们遇到了一些黑客问题 我想知道是否有一种方法可以获取当前位于内存中而不是磁盘上的进程的副本 我们在游戏中有一个非常安全的算法 但是它无法阻止人们修改游戏的内存版本 有什么办法可以做到这一点吗
  • 将java应用程序转换为jsp/servlet [重复]

    这个问题在这里已经有答案了 我有一个接受分段上传的java应用程序 我的问题是我想要一个HTML JSP前端 而不是仅仅在服务器上工作 根据我提供的代码 实现此目的的最佳方法是什么 这对我来说有点困惑 因为我不确定如何将文件上传部分带入 h
  • 如何在Java文件中指定相对文件路径,以便将文件放入jar文件后仍然可以工作?

    假设我有一个Java类需要使用绝对路径访问文件 home gem projects bar resources test csv package com example class Foo String filePath path to t