java 9 资源文件不同模块 NoSuchFileException
java 9 resource file different module NoSuchFileException
我正在尝试加载资源文件夹中的文件,但出现异常。
我正在使用 java 9,具有读取文件代码的 java 文件存在于其他模块中,调用代码位于其他模块中。
有人可以在这里建议如何进行吗?
异常堆栈跟踪
java.nio.file.NoSuchFileException: genome-tags.csv
at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:85)
at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
at java.base/sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:231)
at java.base/java.nio.file.Files.newByteChannel(Files.java:364)
at java.base/java.nio.file.Files.newByteChannel(Files.java:410)
at java.base/java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:384)
at java.base/java.nio.file.Files.newInputStream(Files.java:154)
at java.base/java.nio.file.Files.newBufferedReader(Files.java:2809)
at java.base/java.nio.file.Files.readAllLines(Files.java:3239)
at java.base/java.nio.file.Files.readAllLines(Files.java:3279)
at com.bhargo.filesystem.reader/com.bhargo.filesystem.reader.FileSystemReader.read(FileSystemReader.java:15)
at com.bhargo/com.bhargo.Main.main(Main.java:20)
密码是:-
public class Main {
public static void main(String[] args) {
ServiceLoader<IReader> serviceLoader = ServiceLoader.load(IReader.class);
try {
System.out.println(serviceLoader.iterator().next().read("genome-tags.csv", Main.class).size());
} catch (IOException e) {
e.printStackTrace();
}
}
}
public interface IReader {
List<String> read(String fileLocation, Class clazz) throws IOException;
default File getFile(String fileLocation, Class clazz) {
URL url = clazz.getResource(fileLocation);
return new File(getClass().getClassLoader().getResource(fileLocation).getFile());
}
}
public class FileSystemReader implements IReader{
@Override
public List<String> read(String fileLocation, Class clazz) throws IOException {
return Files.readAllLines(Paths.get(getFile(fileLocation, clazz).getName()));
}
}
谢谢,
阿马尔
改变
public class FileSystemReader implements IReader{
@Override
public List<String> read(String fileLocation, Class clazz) throws IOException {
return Files.readAllLines(Paths.get(getFile(fileLocation, clazz).getName()));
}
}
至
public class FileSystemReader implements IReader{
@Override
public List<String> read(String fileLocation, Class clazz) throws IOException {
return Files.readAllLines(Paths.get(getFile(fileLocation, clazz).getAbsolutePath()));
}
}
我正在尝试加载资源文件夹中的文件,但出现异常。 我正在使用 java 9,具有读取文件代码的 java 文件存在于其他模块中,调用代码位于其他模块中。 有人可以在这里建议如何进行吗?
异常堆栈跟踪
java.nio.file.NoSuchFileException: genome-tags.csv
at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:85)
at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
at java.base/sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:231)
at java.base/java.nio.file.Files.newByteChannel(Files.java:364)
at java.base/java.nio.file.Files.newByteChannel(Files.java:410)
at java.base/java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:384)
at java.base/java.nio.file.Files.newInputStream(Files.java:154)
at java.base/java.nio.file.Files.newBufferedReader(Files.java:2809)
at java.base/java.nio.file.Files.readAllLines(Files.java:3239)
at java.base/java.nio.file.Files.readAllLines(Files.java:3279)
at com.bhargo.filesystem.reader/com.bhargo.filesystem.reader.FileSystemReader.read(FileSystemReader.java:15)
at com.bhargo/com.bhargo.Main.main(Main.java:20)
密码是:-
public class Main {
public static void main(String[] args) {
ServiceLoader<IReader> serviceLoader = ServiceLoader.load(IReader.class);
try {
System.out.println(serviceLoader.iterator().next().read("genome-tags.csv", Main.class).size());
} catch (IOException e) {
e.printStackTrace();
}
}
}
public interface IReader {
List<String> read(String fileLocation, Class clazz) throws IOException;
default File getFile(String fileLocation, Class clazz) {
URL url = clazz.getResource(fileLocation);
return new File(getClass().getClassLoader().getResource(fileLocation).getFile());
}
}
public class FileSystemReader implements IReader{
@Override
public List<String> read(String fileLocation, Class clazz) throws IOException {
return Files.readAllLines(Paths.get(getFile(fileLocation, clazz).getName()));
}
}
谢谢,
阿马尔
改变
public class FileSystemReader implements IReader{
@Override
public List<String> read(String fileLocation, Class clazz) throws IOException {
return Files.readAllLines(Paths.get(getFile(fileLocation, clazz).getName()));
}
}
至
public class FileSystemReader implements IReader{
@Override
public List<String> read(String fileLocation, Class clazz) throws IOException {
return Files.readAllLines(Paths.get(getFile(fileLocation, clazz).getAbsolutePath()));
}
}