我使用的是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/处于同一级别,src/是我项目的根。好的,我接受它,并把txt放在那里,这样我就可以清理和构建了。现在,如果我在netbeans中运行(绿色箭头按钮),它可以正常运行(即使在我的build文件夹中没有txt文件,这似乎很奇怪),但是如果我尝试直接执行dist文件夹中的jar (这应该是您在项目完成后想要分发的内容),程序将失败,因为在它旁边的jar ofr中没有txt文件夹。
好的,所以我改变了我的策略,去做看起来合乎逻辑的事情,那就是把我的txt放在src目录中。当我构建时,它会出现在build目录中,也会出现在jar中。
但是程序会失败(在netbeans内部和外部),因为在new 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文件没有任何意义。
我找不到一种方法来解决这项本应微不足道的任务。
你能帮帮我吗?
发布于 2013-03-07 02:46:04
如果你想把文本文件放到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();
}
}
}发布于 2013-03-07 00:03:21
试试这个:
让File对象像这个File f = new File("myfile.txt");一样初始化。
现在,不要将myfile.txt作为jar的一部分导出,而是将其放在同一目录中jar文件的旁边。
发布于 2015-07-14 13:09:02
首先,通过netbeans创建一个新文件会将该文件放到项目文件夹的根目录中。(我仍然不知道如何引用这个位置)。
因此,在创建新文件时,右键单击“包”,而不是项目。我创建了一个名为resources的包,并将我的文件放入其中。我使用的解决方案(应该也适用于文件f= new file ):
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("resources/file.xml");https://stackoverflow.com/questions/15251871
复制相似问题