我正在使用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文件没有任何意义。
我找不到办法来解决这个所谓的微不足道的任务。
你能帮助我吗?
答案 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");