2017-02-18 22 views
3

我想要在代码中读取名为FileofNames.txt的文件。但是当我运行这段代码时,我得到一个NullPointerException。在Intellij中放置文本文件的位置

URL url=ApacheCommonIOExample.class.getResource("src/Files/FileofNames.txt"); 
System.out.println(url.getPath()); 

所以我的问题是,我可以把文件放在intellij中,以便我可以从任何java源代码中读取它。 Image of my directory 。目前我的文本文件在src/Files中,我想从src/org/java.practice/FileName.java中读取它。

回答

4

假设您使用的是Maven Standard Directory Layout,则应将资源置于/src/main/resources(或适当的/src/test/resources)。

final InputStream stream = this.getClass().getResourceAsStream("/filename.txt"); 
final InputStreamReader reader = new InputStreamReader(stream); 
final BufferedReader buffered = new BufferedReader(reader); 
String line = buffered.readLine(); 

说明

getResourcegetResourceAsStream将加载使用用来加载上下文类的同一类资源:

然后使用Java代码,这样的装载。在我的示例this类;在你的情况下,类加载器ApacheCommonIOExample。这些可能不一样。在我的例子中,资源和类已知是在同一个地方,因为这是maven项目定义的方式,因此我提到了它。在你的例子中,它很可能试图从加载ApacheCommonIOExample的同一位置加载资源。

+0

这个方法奏效了,非常感谢你!但是当我尝试运行此代码时,它会再次打印,您能告诉我为什么吗? 'URL url = ApacheCommonIOExample.class.getResource(“/ FileofNames”); File file = new File(url.getPath()); (file.exists()) System.out.print(“exists”);如果(file.exists()) System.out.print(“exists”); else System.out.print(“try again”);' –