Java 尝试递归打印给定目录中的所有文件路径时出错
我正在尝试递归打印目录中的所有文件路径Java 尝试递归打印给定目录中的所有文件路径时出错,java,file,Java,File,我正在尝试递归打印目录中的所有文件路径 try { Files.walkFileTree(Utils.getContentDirectory().toPath(), new SimpleFileVisitor<Path>() { //**Exception here** @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOExcepti
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();
}
public static File getContentDirectory() {
return new File(UltimateBugTracker.class.getClassLoader().getResource("resources/html/index.html").getFile()).getParentFile();
}
但不管出于什么原因,它抛出了这个异常
线程“main”java.nio.file.InvalidPathException中的异常:索引4处的非法字符:文件:\C:\Users\raz\Desktop\WebServer.jar\资源\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);
}
publicstaticvoidmain(字符串[]args)引发IOException
{
var jar=Path.of(“C:\\Users\\raz\\Desktop\\WebServer.jar”);
System.out.println(“isRegularFile()=”+Files.isRegularFile(jar));
FileVisitor您的搜索目录中是否有任何压缩文件,例如jar
或zip
?不确定这是否是问题所在,因为异常没有说jar:file…
。它们可能是有效的URI
s,但不是有效的Path
s或file
s。路径也可能是无效的tains`.Try
resources\\html\\index.html`.文件:\C:\Users\raz\Desktop\WebServer.jar!\resources\html
是一个URL而不是路径。错误消息清楚地表明,出现在文件
后面的冒号字符是意外的。