如果您想将文件加载到与代码相同的路径中,那么我建议您将其放在与代码相同的根文件夹中,而不是与类相同的路径中。
原因:类可以在一个 jar 中,数据文件可以放在同一个 jar 中,但是这样更难编辑和更新。
还建议您查看评论中建议的首选项类:http ://www.javacodegeeks.com/2011/09/use-javautilprefspreferences-instead-of.html尽管在某些情况下我认为拥有自己的数据/ excel/ 是可以的csv/java.util.Properties 文件
不知道为什么它在 Eclipse 中工作,但我建议你专注于从命令提示符/终端运行它,因为它上线时是“真实模式”
你可以问你的课
String s = getClass().getName();
int i = s.lastIndexOf(".");
if(i > -1) s = s.substring(i + 1);
s = s + ".class";
System.out.println("name " +s);
Object testPath = this.getClass().getResource(s);
System.out.println(testPath);
这会给你
名称 TstPath.class 文件:/java/Projects/tests3b/build/classes/s/TstPath.class
这是我的eclipse构建路径...
需要解析它以获取加载类的路径。
记住:
- 应用程序可以从其他地方启动
- 类可以在 jar 中,然后路径将不同(将指向其中的 jar 和文件
- 类路径在运行时和第 1 点可以有很多
- 一个类可能在运行时通过网络/代理/注入等创建,因此没有文件源,所以这不是一个通用的解决方案。
- 想想你想在更高层次上实现什么,然后发布这个问题。意思是为什么你想要这条路?
你想要应用程序路径: -
文件 f = new File("./");
f.getCanonicalPath();//...
因此可以从文件夹 c:\app1\run\ 启动应用程序
jar 可能位于 c:\app1\libsMain\myapp.jar
一个辅助 jar 可以在 c:\commonlibs\set1
所以这只会告诉你JVM在哪里找到你的类,这可能是也可能不是你需要的。
如果在一个罐子里会给你一些在 unix 或 windows 中这样的东西
jar:file:c:\app\my.jar!/s/TstPath.class
如果 package 是 s 并且 class 是 TstPath,你可以确定这会起作用,因为类必须在那里......
现在要解析这个,你可以查找你的类名并删除 / 或 \ 直到你得到你想要的路径。字符串 lastIndexOf 会有所帮助