Netbeans - 访问txt文件,以便应用程序在netbeans外部工作 - 在哪里找到文件?

时间:2013-03-06 15:49:56

标签: java netbeans jar

我正在使用netbeans;当我们想要访问ressource文件(例如包含静态信息的txt文件)时,我无法弄清楚我们应该如何构建项目:

这是一个简单的例子,我有一个名为Test.java的文件,它读取一个名为myfile.txt的txt文件

我想输入类似的内容:

public class Test {
    public static void main(String[] args) {
        try{
            File f = new File("myfile.txt");
            Scanner s = new Scanner(f);
            System.out.println(s.next());
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
}

如果myfile.txt与.java文件位于同一目录中,这似乎是合理的。

但是,似乎如果我输入我的代码,那么txt文件应该与src /我项目的根目录处于同一级别。好的我会接受并将txt放在那里,所以我清理并构建。现在如果我运行netbeans(绿色箭头按钮)它运行正常(即使我的构建文件夹中没有txt文件,这看起来很奇怪)但是当然如果我尝试直接执行dist文件夹中的jar(应该在项目完成后你想要分发的东西)程序失败,因为它旁边的jar里面没有txt文件夹。

好的,所以我改变了我的策略并去寻找合乎逻辑的东西,那就是将我的txt放在src目录中。当我构建它时,它出现在构建目录中,也出现在jar中。

但程序失败(在netbeans和outside之外),因为在新的File命令中文件的路径不正确。所以我可以改变并输入

public class Test {
    public static void main(String[] args) {
        try{
            File f = new File("src/myfile.txt");
            Scanner s = new Scanner(f);
            System.out.println(s.next());
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
}

但是现在它当然不会在netbeans之外运行,因为src文件夹对穷人.jar文件没有任何意义。

我找不到办法来解决这个所谓的微不足道的任务。

你能帮助我吗?

3 个答案:

答案 0 :(得分:3)

如果你想要jar中的文本文件,你可以使用如下:

public class Test {
    public static void main(String[] args) {
        try{
            Scanner s = new Scanner(Test.class.getResourceAsStream("/myfile.txt")); // <- in the src folder
            Scanner s2 = new Scanner(Test.class.getResourceAsStream("./myfile.txt")); // <- in the package of your *.java file
            System.out.println(s.next());
            System.out.println(s2.next());
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
}

答案 1 :(得分:0)

试试这个:

File对象初始化为File f = new File("myfile.txt");

现在不要将myfile.txt作为jar的一部分导出,而是将它放在jar文件的同一目录旁边。

答案 2 :(得分:0)

首先,通过netbeans创建一个新文件只会将文件放入项目文件夹的根目录中。 (我仍然不知道如何引用这个位置。)

因此,在创建新文件时,右键单击“包”,而不是项目。我创建了一个名为resources的包,并将我的文件放入其中。我使用的解决方案(应该与文件f =新文件一起使用):

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("resources/file.xml");