2011-09-26 196 views
0

好的我正在使用Eclipse开发一个需要读取文本文件的程序。这个想法是将JAR和文本文件放在同一个文件夹中。所以我得到的文本文件的路径是这样的:在Linux中将Java URL转换为有效的文件路径

Client.class.getClassLoader().getResource("Client.class"); 

这正确返回的路径和我追加的文件名,并获得以下路径:当我出口我的项目

/home/marquinio/workspace/my_project/info.txt 

问题是到一个可执行的JAR文件中。 JAR无法读取文件。我加倍检查,一切都很好。我看到的唯一的问题是,现在的路径有一些“文件:”开头附加这样的:

file:/home/marquinio/workspace/my_project/info.txt 

这可能是为什么我得到一个“FileNotFoundException异常”。 JAR和文本文件都在同一个文件夹中。

任何人都知道如何解决这个问题?为什么在命令提示符下Java和Eclipse之间执行JAR的行为会有所不同? 是否有替代Java提供的“... getResource(...)”没有“file:”?

注意:此JAR还应该在Windows环境中兼容。仍然需要测试它。

在此先感谢。

+0

一种可能性:在调用作为文本文件路径的jar时传入命令行参数。 –

+1

*“需要读取文本文件”*如果不需要将**写入文本文件,请将其放入Jar并使用'getResource(String)'获取URL。该URL不能用于'Desktop.open(文件)',但有'Desktop.browse(URI)'和许多其他方式来显示文本文件在几行代码中。 –

+0

糟糕!我刚刚意识到'Desktop.browse(URI)'将无法使用Jar中的资源。我多么愚蠢。不过,其他方面还有'JEditorPane.setPage(URL)'。将JEP放入'JScrollPane'中,为其设置一个合理的首选大小,并使用'JOptionPane'显示它。大约5-10行代码。这里是一个[简短示例](http://stackoverflow.com/questions/7158435/java-opening-a-resource-txt-file-which-is-in-a-jar-with-os-standard-applicatio/ 7165320#7165320)。 –

回答

1

您所指的资源不保证是文件系统上的文件。为什么不使用ClassLoader#getResourceAsStream()?没有研究细节,我最好的猜测是你看到的不同行为是因为在上面的每种情况下都使用了不同的类加载器。