1、迭代目录中的文件
Files中有一方法,它可以产生一个Iterable对象
//创建一个相对路径,此处是用户当前的工作目录
final String inDirectory = "";
Path dir = Paths.get(inDirectory);
//访问dir目录下的所有根目录下的文件,不包括子文件中的文件
try (DirectoryStream<Path> entries = Files.newDirectoryStream(dir))
{
for (Path entry : entries)
System.out.println(entry);
}
可以用glob模式来过滤文件
//访问dir目录下的所有根目录下的txt文件,不包括子文件中的文件
try (DirectoryStream<Path> entries = Files.newDirectoryStream(dir, "*.txt"))
{
for (Path entry : entries)
System.out.println(entry);
}
2、访问某个目录的所有子孙成员(子目录,以及子目录下的目录......)
//访问某个目录的所有子目录,不会到文件
Files.walkFileTree(dir, new SimpleFileVisitor<Path>()
{
public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes attrs)
{
System.out.println(path);
return FileVisitResult.CONTINUE;
}
public FileVisitResult visitFileFailed(Path path, IOException exc)
{
return FileVisitResult.CONTINUE;
}
});
3、ZIP文件系统
//创建一个相对路径,此处是用户当前的工作目录下的temp.zip
final String zipName = "temp.zip";
Path zip = Paths.get(zipName);
//通过遍历文件树,列出zip文档中的所有文件,包括子目录下的文件
FileSystem fs = FileSystems.newFileSystem(zip,null);
Files.walkFileTree(fs.getPath("/"), new SimpleFileVisitor<Path>()
{
public FileVisitResult visitFile (Path file, BasicFileAttributes attrs)
{
System.out.println(file);
return FileVisitResult.CONTINUE;
}
});
注释:如果zip文件名或其中文件名包括中文,会出错,暂时没有找到好的解决办法
网友评论