当我运行我的jar时,我尝试了访问CSV文件的所有内容。我将CSV放在Eclipse中的资源包中,当我从那里运行代码时它很好,但是当我从可执行文件运行jar时它不起作用。
ClassLoader c = MyClass.class.getClassLoader();
URL url = c.getResource("com/mysoft/resources/");
String path = URLDecoder.decode(url.getPath(), "utf-8");
File f = new File(path+ "VAL.csv");
if(f.exists())
...
我不想把这个文件放在jar里面。我只想读取文件。我该怎么办?
编辑:我关闭了我的第一篇文章的登录信息 - Access to csv file in jar - 我不知道如何删除它,我无法回复评论。所以我在这里再次发布了它。是否可以不使用InputStream?
答案 0 :(得分:1)
你在这里使用getResource()是非常可疑的。我不会依赖getResource()来查找数据包/目录(毕竟,人们可以说它应该返回资源,而不是命名空间)。
此外,永远不会解释getResource()返回的URL - 它的邀请故障时间为2。 ClassLoader可以返回任何内容,返回的可能与您要求的内容没有任何共同之处。当ClassLoader不是您的标准类路径JRE类加载器时(考虑Application Server,WebStart等),从URL的String表示构造某些东西会有一个令人憎恶的失败机会。
直接向询问您想要的资源:
getResource("com/mysoft/resources/VAL.csv")
并且不创建文件,使用InputStream。资源不是文件,您无法使用File API访问它们。