如何从类路径加载/引用文件作为 File 实例

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

如果有另一种解决方案来寻找某个字节的偏移量并读取该行,我也愿意接受这种解决方案。

116427 次浏览

尝试获取类路径资源的 URL:

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

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

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

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


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

或者相对 CLASSPATH 路径(当您正在编写的类与资源文件本身在同一个 Java 包中时,即 com.path.to) :


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

这也可以工作,并且不需要/path/to/file URI 转换。如果该文件位于类路径中,那么这个文件将会找到它。

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

我发现这一行代码是最有效和最有用的:

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

非常有效。