使用Java部署文本文件,它们应该位于何处?

时间:2017-08-24 15:11:00

标签: java netbeans

我有一个Java应用程序,它从一个名为Countries.txt的文本文件中读取一些数据。在Netbeans中,该文件位于Project级文件夹下。现在我已经在Netbeans中测试了它,我准备在不同的机器上部署并测试它作为jar文件。 dist文件夹不包含文本文件,我已手动将其复制到dist(文件夹作为jar文件)和dist \ lib文件夹,但我找不到'文件'错误。 我的文件没有路径信息,只是......

br = new BufferedReader(new FileReader("Countries.txt"));

使用jar文件,支持文件应该在哪里?

2 个答案:

答案 0 :(得分:2)

“new File(..)”和类似“new FileReader(..)”之类的结构总是构造相对于当前工作目录的路径(除非您将绝对路径作为参数传递)。在IDE中,这主要是项目的根文件夹(至少在eclipse中,根据您的描述我也假设在Netbeans中)。

但是当你在IDE中运行它时,当前的工作目录就是你启动java.exe的目录。

为了避免这些不一致,我建议将有问题的文件放入一个文件夹中,该文件夹声明在类路径中(-cp命令行参数或在jar中的manifest.mf中定义)。然后,您可以将文件作为资源加载:

 this.getClass().getResourceAsStream( "myFile.txt");

修改

建议将以上方法用于只读资源。这些资源甚至可以放在jar文件的根文件夹中。

但是如果你必须编辑文件(并将其保存回某处),事情会变得更加复杂。

独立的Java应用程序通常具有如下文件夹布局:

myProject
    bin
        start.bat
    lib
        myApp.jar
    cfg
        myApp.properties

通过双击start.bat,您将找到当前目录为myProject / bin。知道这一点很容易导航,例如到cfg目录:

new File(../cfg/myApp.properties)

这对您的运行时安装有效。但是在IDE中你可能有另一种布局:

myProject
    prod
        bin
            start.bat
        cfg
            myApp.properties
        src
            ...
    test
        ...
    lib
        myApp.jar

如果要在IDE中运行时保持相同的硬编码相对路径,则必须在IDE中的lauch配置中配置工作目录。按照上面的例子(来自eclipse的例子):

Working directory = "${workspace_loc:MyProject/prod/bin}". 

在eclipse中,这可以在第二个选项卡“Arguments”上的Run / RunConfigurations中完成。我相信Netbeans也有这种可能性。

答案 1 :(得分:1)

在SO和其他地方进行了一些挖掘之后,我找到了一种返回绝对路径的方法,并将其添加到我的一般Utilities类中。它似乎适用于我使用它的所有机器windows和linux。

{{1}}