我有一个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)
我该怎么做?我尝试过各种各样的技巧,但仍然无法让程序读取文件。