2010-12-05 59 views
52

我有一个文件位于我的类路径中,例如, com/path/to/file.txt。我需要加载或引用此文件作为java.io.File对象。这是因为我需要使用java.io.RandomAccessFile来访问文件(文件很大,我需要寻找某个字节的偏移量)。这可能吗? RandomAccessFile的构造函数需要一个File实例或String(路径)。如何从类路径加载/引用文件作为File实例

如果还有另一种解决方案寻求某个字节偏移量并读取该行,我也对此表示赞同。

+0

工作端到端的例子是这里的细节:[https://stackoverflow.com/questions/1464291/how-to-really-read-text-file-from-classpath-in-java/49120666#49120666] – ravibeli 2018-03-05 22:43:36

回答

175

尝试获得一个网址的搁置你的classpath资源:

URL url = this.getClass().getResource("/com/path/to/file.txt") 

然后使用接受URI的构造函数创建一个文件:

File file = new File(url.toURI()); 
+0

哇!这是快速和正确的。谢谢! – jake 2010-12-05 17:01:49

+11

任何机会,你可以用大绿色的勾号接受这个答案? :) – joelittlejohn 2010-12-06 13:12:03

+0

对不起,我还不能投票。 – jake 2010-12-13 03:39:48

3

或者使用直接使用资源的InputStream绝对CLASSPATH路径(以/斜杠字符开头):

 

getClass().getResourceAsStream("/com/path/to/file.txt"); 
 

或相对路径CLASSPATH(如果你正在写的类是在同一个Java包的资源文件本身,即com.path.to):

 

getClass().getResourceAsStream("file.txt"); 
 
41

这也适用,并且不需要/路径/到/文件URI转换。如果该文件在类路径中,则会找到它。

File currFile = new File(getClass().getClassLoader().getResource("the_file.txt").getFile()); 
14

我觉得这是一个行代码作为最有效和最有用:

File file = new File(ClassLoader.getSystemResource("com/path/to/file.txt").getFile()); 

就像一个魅力。

相关问题