在部署与开发期间从JAR文件加载

cla*_*amp 2 java deployment jar

当我将一些数据加载到我的java程序中时,我通常使用FileInputStream.但是我将程序部署为jar文件和webstart,所以我必须使用getRessource()或getRessourceAsStream()直接从jar文件加载数据.

现在总是在开发和部署之间切换这段代码很烦人吗?

有这种方法吗?即有没有办法知道代码是否从jar运行?

当我尝试像这样加载它时:

InputStream is = this.getClass().getResourceAsStream("file.txt");
Run Code Online (Sandbox Code Playgroud)

返回的输入流只是null,尽管该文件肯定在应用程序的根目录中.

谢谢!

Jon*_*eet 7

你为什么FileInputStream在开发过程中使用?为什么不getResourceAsStream从一开始就使用?只要将文件放在类路径中的适当位置,就不会有任何问题.它仍然可以是本地文件系统中的文件,而不是jar文件中的文件.

在考虑最终部署环境的情况下开发是有帮助的.

编辑:如果你想在类路径的目录中有东西,你应该使用:

InputStream x = getClass().getResourceAsStream("/file.txt");
Run Code Online (Sandbox Code Playgroud)

要么

InputStream x = getClass().getClassLoader().getResourceAsStream("file.txt");
Run Code Online (Sandbox Code Playgroud)

基本上Class.getResourceAsStream会将相关资源解析为包含该类的包; ClassLoader.getResourceAsStream解析相对于"root"包的所有内容.