java获取jar内部包的路径
在我的java程序中,我有一个名为resources的包,在那里我保留了一个日志。ascii文件,我在其中保存一些详细信息。为此,我使用了这个方法
.class.getResource("/resources")
当我在eclipse上测试它时,一切正常,但是当我构建jar时,它找不到路径。你知道如何克服这个问题吗?
谢谢你抽出时间
private static String retrieveSelectedWorkspace() throws FileNotFoundException{
String temp[];
String str=Gui.class.getResource("/resources").toString();
temp=str.split("/",2);
FileReader fr = null;
fr = new FileReader(temp[1]+"/log.ascii");
Scanner scanner = new Scanner(fr);
while(scanner.hasNextLine())
return scanner.nextLine().toString();
return null;
}
}
# 1 楼答案
我认为您的代码可以使用Class.getResourceAsStream()(需要将
/resources/log.ascii
打包到jar中,或者类路径上的其他地方)但至于你的实际问题,你肯定可以从一个jar中获取一个文件夹资源,只要这个文件夹被打包在jar中
测试。爪哇:
命令行。创建一个文件和一个文件夹。然后尝试从
.class
文件运行代码和从.jar
文件运行代码创建罐子:
从罐子里跑出来:
# 2 楼答案
在eclipse上运行日志时。ascii是文件系统中的一个文件,但当您将其打包到jar中时,日志会被删除。ascii是类似zip的文件中的一个条目。这就是为什么你没有完成它
您可以创建一个临时文件,或在系统属性java.io.tmpdir指定的临时目录上创建该文件,以使其正常工作
# 3 楼答案
getResource
返回一个URL
。不要toString
它,用它做一些丑陋的字符串连接。构建JAR后,URL不是文件系统URL。在Eclipse中开发并从那里运行时,您仍然可以使用这些文件当然,你不能在罐子里写资源
# 4 楼答案
试试看
你也可以在一行中完成整个过程: