过去2个小时一直在寻找这个并且找不到任何东西(我找到了同样问题的解决方案,但有图像,而不是文本文件)。
差不多,我制作了一个读取文本文件的程序。该文件是名称和ID列表。使用Eclipse,我将文件放在我的src文件夹中,并在程序中将路径文件放入其中。像这样:
in = new BufferedReader(new FileReader(curDir+"\\bin\\items.txt"));
其中curDir是用户的当前目录(在System.getProperty(“user.dir”)中找到)。
现在问题是,当我从Eclipse运行它时,程序运行正常但是当我尝试使它成为可运行的JAR然后运行它时,程序运行,但是文本文件中的信息没有加载。看起来Eclipse并没有将文本文件与JAR放在一起。
编辑:解决了问题?那么JAR文件需要在包含所有原始文件的文件夹中吗?我很困惑,那么什么是JAR文件?答案 0 :(得分:2)
无论是从Eclipse还是从JAR运行,获取文件的更强大的方法是
MyClass.getResource("items.txt")
其中MyClass
是与您需要的资源在同一个包(文件夹)中的类。
如果Eclipse没有将文件放入JAR,您可以转到
运行 - >运行配置 - > - > Classpath选项卡 - >高级 - >添加文件夹
然后将包含文件的文件夹添加到类路径中。或者,导出Ant脚本并创建自定义构建脚本。
答案 1 :(得分:1)
到目前为止,FileReader
只能读取磁盘文件系统资源。但是JAR只包含类路径资源。您需要将其作为类路径资源进行读取。您需要ClassLoader
。
假设{J}中的Foo
是需要读取资源并且items.txt
放在JAR的类路径根目录中的类,那么您应该按如下方式读取它(注意:前导斜杠)需要的话):
InputStream input = Foo.class.getResourceAsStream("/items.txt");
reader = new BufferedReader(new InputStreamReader(input, "UTF-8"));
// ...
或者如果你想独立于类或运行时上下文,那么使用相对于类路径根运行的上下文类加载器(注意:不需要前导斜杠!):
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("items.txt");
reader = new BufferedReader(new InputStreamReader(input, "UTF-8"));
// ...
(UTF-8当然是文件编码的字符集,否则你可能会看到Mojibake)
答案 2 :(得分:0)
获取jar文件的位置
首先创建一个文件夹(比如myfolder)并将文件放入其中
考虑以下功能
public String path(String filename)
{
URL url1 = getClass().getResource("");
String ur=url1.toString();
ur=ur.substring(9);
String truepath[]=ur.split("myjar.jar!");
truepath[0]=truepath[0]+"myfolder/";
truepath[0]=truepath[0].replaceAll("%20"," ");
return truepath[0]+filename;
}//This method will work on Windows and Linux as well.
//You can alternatively use the following line to get the path of your jar file
//classname.class.getProtectionDomain().getCodeSource().getLocation().getPath();
假设您的jar文件位于D:\ Test \ dist
中然后path()将返回/ D:/ Test / dist / myfolder / filename
现在您可以将'myfolder'放在jar文件所在的文件夹中
OR
如果您想访问jar中的一些只读文件,您应该将其复制到一个
你的包,可以作为
访问它yourClassname.getResource( “/包/ FILENAME.TXT”);