在jar-WEB-INF / lib中读取文件而不是WEB-INF / classes

时间:2016-12-22 07:43:03

标签: java-8

我的方法就是这样

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上扫描了其他问题,但似乎没有任何问题可以解决这个问题。任何帮助将不胜感激。

0 个答案:

没有答案