如何解决尝试递归打印给定目录中的所有文件路径时发生错误
我正在尝试递归打印目录中的所有文件路径
try {
Files.walkFileTree(Utils.getContentDirectory().toPath(),new SimpleFileVisitor<Path>() { //**Exception here**
@Override
public FileVisitResult visitFile(Path file,BasicFileAttributes attrs) throws IOException {
Utils.log(file.toString());
return FileVisitResult.CONTINUE;
}
});
} catch (IOException e) {
e.printStackTrace();
}
这是我要读取的目录,它确实存在(我正在使用maven,它是一个内部目录)
public static File getContentDirectory() {
return new File(UltimateBugTracker.class.getClassLoader().getResource("resources/html/index.html").getFile()).getParentFile();
}
但无论出于何种原因,都会引发此异常
线程“ main”中的异常java.nio.file.InvalidPathException:索引4处的非法char :file:\ C:\ Users \ raz \ Desktop \ WebServer.jar!\ resources \ html
这没有意义,因为我正在使用fileInstance.toPath()
方法中的构建来获取路径。我不明白为什么会说这是无效路径。
解决方法
您没有将有效路径传递给walkFileTree,而是传递了jar中资源的URI。希望该示例可以使您更清楚地了解如何遍历目录中的jar和文件中的资源:
public static void main(String[] args) throws IOException
{
var jar = Path.of("C:\\Users\\raz\\Desktop\\WebServer.jar");
System.out.println("isRegularFile()="+Files.isRegularFile(jar));
FileVisitor<? super Path> visitor = new FileVisitor<Path>()
{
public FileVisitResult preVisitDirectory(Path dir,BasicFileAttributes attrs) throws IOException
{
System.out.println("dir START "+dir);
return FileVisitResult.CONTINUE;
}
public FileVisitResult visitFile(Path file,BasicFileAttributes attrs) throws IOException
{
System.out.println("file "+file);
return FileVisitResult.CONTINUE;
}
public FileVisitResult visitFileFailed(Path file,IOException exc) throws IOException
{
System.out.println("file fail "+file);
return FileVisitResult.CONTINUE;
}
public FileVisitResult postVisitDirectory(Path dir,IOException exc) throws IOException
{
System.out.println("dir END "+dir);
return FileVisitResult.CONTINUE;
}
};
try (FileSystem fs = FileSystems.newFileSystem(jar))
{
Path path = fs.getPath("/resources/html");
System.out.println("walkFileTree within archive "+ jar+" starting at path: "+path);
Files.walkFileTree(path,visitor);
}
Path parent = jar.getParent();
System.out.println("walkFileTree at "+ parent);
Files.walkFileTree(parent,visitor);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。