我的方法就是这样
public static Stream<Path> readFolder(String path) throws URISyntaxException, IOException
{
ClassLoader loader = FileUtil.class.getClassLoader();
URL dir = loader.getResource(path);
if (dir == null) return Stream.empty();
...
if (dir.getProtocol().equals("jar"))
{
FileSystem fileSystem = FileSystems.newFileSystem(dir.toURI(), Collections.<String, Object>emptyMap());
Stream<Path> results = Files.walk(fileSystem.getPath(path), 1).filter(file -> !file.toString().equals(dir.toString()));
fileSystem.close();
return results;
}
return Stream.empty();
}
从jar运行代码失败。如果我跑
Paths.get(path)
结果为/WEB-INF/lib/Database-1.0.0.jar!/com/update/sql/
,但fileSystem.getPath(path)
返回com/update/sql/
。
所以我认为问题可能是fileSystem在我的Application.jar!/ WEB-INF / lib目录中读取Database-1.0.0.jar时遇到问题但是因为Paths.get(path)找不到正确的文件
我的错误是:
java.nio.file.NoSuchFileException: com/update/sql/
at com.sun.nio.zipfs.ZipPath.getAttributes(ZipPath.java:666)
at com.sun.nio.zipfs.ZipFileSystemProvider.readAttributes(ZipFileSystemProvider.java:294)
at java.nio.file.Files.readAttributes(Files.java:1737)
at java.nio.file.FileTreeWalker.getAttributes(FileTreeWalker.java:219)
at java.nio.file.FileTreeWalker.visit(FileTreeWalker.java:276)
at java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:322)
at java.nio.file.FileTreeIterator.<init>(FileTreeIterator.java:72)
at java.nio.file.Files.walk(Files.java:3574)
at util.FileUtil.readFolder(FileUtil.java:36)
我已经在Stack上扫描了其他问题,但似乎没有任何问题可以解决这个问题。任何帮助将不胜感激。