从Jar中读取文件

时间:2017-03-29 17:31:17

标签: java file jar io

我有一个jar,用jar本身运行jar所需的输入文件编译。问题是,如何指定路径以便可以读取文件?

这是我尝试阅读文件的方式:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader == null) {
    classLoader = getClass().getClassLoader();
}
System.out.println("FILE is readable? -> " + new File(classLoader.getResource(strFileName).toExternalForm()).canRead());

List<String> lines = Files.readAllLines(new File(classLoader.getResource(strFileName).toExternalForm()).toPath());

但总是,我得到的消息是文件不可读。我知道文件在那里,因为我已经检查过了。我也知道类加载器正在查找文件,因为如果我将文件input.txt作为strFileName给它,它生成的路径指向jar中,类似于:jar:file:/home/me/Dropbox/Assignments/Files/MyJar.jar!/input.txt。因此,我知道它找到了文件,但是发生了一些io错误,我只是不确定是什么问题。

java.nio.file.NoSuchFileException: jar:file:/home/me/Dropbox/Assignments/Files/MyJar.jar!/input.txt
    at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
    at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
    at java.nio.file.Files.newByteChannel(Files.java:361)
    at java.nio.file.Files.newByteChannel(Files.java:407)
    at java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:384)
    at java.nio.file.Files.newInputStream(Files.java:152)
    at java.nio.file.Files.newBufferedReader(Files.java:2784)
    at java.nio.file.Files.readAllLines(Files.java:3202)
    at java.nio.file.Files.readAllLines(Files.java:3242)
    at com.smac89.school.Program.readState(GameState.java:203)
    at com.smac89.school.Program.simulate(GameState.java:57)
    at com.smac89.school.Program.main(GameState.java:31)

我该怎么做?我尝试过各种各样的技巧,但仍然无法让程序读取文件。

0 个答案:

没有答案