如果要在与代码相同的路径中加载文件,那么我建议您将其放在与代码相同的根文件夹中,而不是与类相同的路径中。
原因:类可以在jar中,数据文件可以放在同一个jar中,但编辑和更新起来比较困难。
还建议您查看注释中建议的首选项类:http://www.javacodegeeks.com/2011/09/use-javautilprefspreferences-instead-of.html 尽管在某些情况下我认为拥有自己的data/ 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);
这将给你
name TstPath.class file:/java/Projects/tests3b/build/classes/s/TstPath.class
这是我的日食构建路径...
需要解析此值以获取加载类的路径。
记得:
- 应用程序可以从其他地方启动
- 类可以在jar中,然后路径将不同(将指向jar和文件内部
- 类路径在运行时和点 1 时可以很多
- 一个类可能在运行时通过网络/代理/注入等创建,因此没有文件源,所以这不是一个通用的解决方案。
- 想想你想在更高的层次上实现什么,并发布这个问题。意思是你为什么想要这条路?
-
你想要应用程序路径:-
文件 f = new File(“./”);
f.getCanonicalPath();//...
因此,可以从文件夹 c:\app1\run\ 启动应用
jar 可能位于 c:\app1\libsMain\myapp.jar
和一个辅助罐可以在 c:\commonlibs\set1
因此,这只会告诉您JVM在哪里找到您的类,这可能是也可能不是您需要的。
如果在罐子里会给你一些类似的东西在unix或Windows中
jar:file:c:\app\my.jar!/s/TstPath.class
如果包是s,类是TstPath,你可以确定这将工作,因为类必须在那里......
现在要解析它,您可以查找您的类名并删除/ 或\,直到获得所需的路径。字符串 last索引将有所帮助