在没有InputStream的jar中访问csv文件

时间:2013-11-27 18:22:50

标签: java eclipse file jar

当我运行我的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?

1 个答案:

答案 0 :(得分:1)

你在这里使用getResource()是非常可疑的。我不会依赖getResource()来查找数据包/目录(毕竟,人们可以说它应该返回资源,而不是命名空间)。

此外,永远不会解释getResource()返回的URL - 它的邀请故障时间为2。 ClassLoader可以返回任何内容,返回的可能与您要求的内容没有任何共同之处。当ClassLoader不是您的标准类路径JRE类加载器时(考虑Application Server,WebStart等),从URL的String表示构造某些东西会有一个令人憎恶的失败机会。

直接向询问您想要的资源:

 getResource("com/mysoft/resources/VAL.csv")

并且创建文件,使用InputStream。资源不是文件,您无法使用File API访问它们。