) metric: skip blank and comment lines if desired. """ import sys, pprint, os from visitor import FileVisitor class LinesByType(FileVisitor): srcExts = [] # define in subclass def __init__(self, trace=1): FileVisitor. ######################################################################### """ import os, sys class FileVisitor override or extend me if self.trace > 1: print(self.fcount, '=>', filepath) class SearchVisitor(FileVisitor
walker passes in; assumes that the toDir does not exist initially; """ import os from visitor import FileVisitor from PP4E.System.Filetools.cpall import copyfile # PP4E is in a dir on path class CpallVisitor(FileVisitor init(self, fromDir, toDir, trace=True): self.fromDirLen = len(fromDir) + 1 self.toDir = toDir FileVisitor.init ######################################################################### """ import os, sys class FileVisitor override or extend me if self.trace > 1: print(self.fcount, '=>', filepath) class SearchVisitor(FileVisitor
\PP4E\Tools>python visitor_poundbang.py C:\temp\PP3E """ import sys from visitor import FileVisitor \Python31\python.exe' # used if no cmdline arg class PoundBangFixer(FileVisitor): def init(self class CleanPyc(FileVisitor): def init(self, trace=0): FileVisitor.init(self, context=0, trace=trace ) def visitfile(self, filepath): FileVisitor.visitfile(self, filepath) if filepath.endswith(' class BigPy(FileVisitor): def init(self, trace=0): FileVisitor.init(self, context=[], trace=trace)
walkFileTree接受一个Path和FileVisitor作为参数。Path对象是需要遍历的目录,FileVistor则会在每次遍历中被调用。 下面先来看一下FileVisitor这个接口的定义: public interface FileVisitor { public FileVisitResult preVisitDirectory 需要调用方自行实现,然后作为参数传入walkFileTree().FileVisitor的每个方法会在遍历过程中被调用多次。 下面看一个walkFileTree()的示例: Files.walkFileTree(path, new FileVisitor<Path>() { @Override public FileVisitResult System.out.println("post visit directory: " + dir); return FileVisitResult.CONTINUE; } }); FileVisitor
######################################################################### """ import os, sys class FileVisitor override or extend me if self.trace > 1: print(self.fcount, '=>', filepath) class SearchVisitor(FileVisitor jpg', '.pyc', '.o', '.a', '.exe'] # or skip these exts def __init__(self, searchkey, trace=2): FileVisitor self.skipexts def visitfile(self, fname): # test for a match FileVisitor.visitfile = 4 # when next test added def selftest(testmask): if testmask & dolist: visitor = FileVisitor
参数包含Path实例和FileVisitor作为参数。FileVisitor是一个接口,业务功能需要自己实现 Files.CONTINUE表示文件遍历应该正常继续。 (path, new FileVisitor<Path>() { //在访问任何目录之前调用 @Override public FileVisitResult preVisitDirectory rootPath = Paths.get("data"); String fileToFind = File.separator + "README.txt"; //SimpleFileVisitor继承接口FileVisitor
FileSystemStructure fileSystem = new FileSystemStructure(folder,file); // 创建访问者 Visitor fileVisitor = new FileNameVisitor(); // 对象结构接受访问者访问 fileSystem.accept(fileVisitor); } } Folder
VisitorList EagerVisitorList 多个对象聚合为一个对象 多个方法聚合为一个方法 将对象抽象为多个底层对象,逐个调用方法 Visitor的各类实现 StreamVisitor FileVisitor 这个接口,这个"流式"的概念,包括了常见的HTTP、文件、标准输入等各类输入 io.Reader *mapper Source string Schema ContentValidator } FileVisitor 文件的访问,包括标准输入,底层调用StreamVisitor来访问 type FileVisitor struct { // 表示文件路径或者STDIN Path string *StreamVisitor
) * @see Files#walkFileTree(Path, java.nio.file.FileVisitor) */ public static void operateDir IOException * @see Files#deleteIfExists(Path) * @see Files#walkFileTree(Path, java.nio.file.FileVisitor ; NioFileUtil.copyDir(start, target); } 关于Files.walkFileTree方法的使用说明,参见这篇博客《walkFileTree、FileVisitor
Files.write(Paths.get("D:\data\test1\test2\test3\test3.log"), "hello".getBytes()); } 2.1. walkFileTree与FileVisitor 使用walkFileTree方法遍历整个文件目录树,使用FileVisitor处理遍历出来的每一项文件或文件夹 FileVisitor的visitFile方法用来处理遍历结果中的“文件”,所以我们可以在这个方法里面删除文件 FileVisitor的postVisitDirectory方法,注意方法中的“post”表示“后去做……”的意思,所以用来文件都处理完成之后再去处理文件夹,所以使用这个方法删除文件夹就可以有效避免文件夹内容不为空的异常
JDK 中声明了一个 FileVisitor 接口,定义了遍历者可以做的操作。 public interface FileVisitor<T> { FileVisitResult preVisitDirectory(T dir, BasicFileAttributes attrs SimpleFileVisitor 则是对于 FileVisitor 接口的实现,该类中仅仅是做了简单的参数校验,并没有太过的逻辑。 public class SimpleFileVisitor<T> implements FileVisitor<T> { @Override public FileVisitResult Objects.requireNonNull(attrs); return FileVisitResult.CONTINUE; } //....其他省略 } FileVisitor
go_path\src\github.com\kubernetes\kubernetes\staging\src\k8s.io\cli-runtime\pkg\resource\interfaces.go FileVisitor
因为我们的数据源是来自文件的,那么我们最直观的想法就是FileVisitor func (v *FileVisitor) Visit(fn VisitorFunc) error { // 省略读取这块的代码
Files.walkFileTree() (1)Files.walkFileTree()方法包含递归遍历目录树功能,将 Path 实例和 FileVisitor作为参数。 Path 实例指向要遍历的目录,FileVisitor 在遍历期间被调用。 (2)FileVisitor 是一个接口,必须自己实现 FileVisitor 接口,并将实现的实例传递给walkFileTree()方法。 在目录遍历过程中,您的 FileVisitor 实现的每个方法都将被调用。 如果不需要实现所有这些方法,那么可以扩展 SimpleFileVisitor 类,它包含FileVisitor 接口中所有方法的默认实现 (3)FileVisitor 接口的方法中,每个都返回一个 FileVisitResult
4 访问者模式在JDK源码中的应用 首先来看JDK的NIO模块下的FileVisitor接口,它提供了递归遍历文件树的支持。 调用FileVisitor中的方法,会返回访问结果的FileVisitResult对象值,用于决定当前操作完成后接下来该如何处理。 public interface FileVisitor<T> { FileVisitResult preVisitDirectory(T dir, BasicFileAttributes attrs public class SimpleFileVisitor<T> implements FileVisitor<T> { protected SimpleFileVisitor() {
4 访问者模式在JDK源码中的应用 首先来看JDK的NIO模块下的FileVisitor接口,它提供了递归遍历文件树的支持。 调用FileVisitor中的方法,会返回访问结果的FileVisitResult对象值,用于决定当前操作完成后接下来该如何处理。 public interface FileVisitor<T> { FileVisitResult preVisitDirectory(T dir, BasicFileAttributes attrs public class SimpleFileVisitor<T> implements FileVisitor<T> { protected SimpleFileVisitor() {
您可以通过FileVisitor接口实现这一点。 本节涵盖以下内容: FileVisitor 接口 启动过程 创建 FileVisitor 时的注意事项 控制流程 示例 FileVisitor 接口 要遍历文件树,首先需要实现一个 FileVisitor。 如果您不需要实现所有四个FileVisitor方法,而是扩展SimpleFileVisitor类,而不是实现FileVisitor接口。 FileVisitor的实例。
for(Path p:paths){ System.out.println(p.getFileName()); } } } 遍历整个文件目录 FileVisitor 需要调用方自行实现,然后作为参数传入walkFileTree(); FileVisitor的每个方法会在遍历过程中被调用多次。 Paths.get("demo3\\demo2"); List<Path> paths=new ArrayList<>(); Files.walkFileTree(path,new FileVisitor (paths)); System.out.println("paths:"+paths); } private static class FileVisitor extends SimpleFileVisitor<Path> { private List<Path> paths; public FileVisitor(List<Path> paths
可以很方便地遍历一颗目录树,并操作符合条件的文件;这其中关键的一个方法就是 Files 类的 walkFileTree,其定义如下: public static Path walkFileTree(Path start, FileVisitor , Integer.MAX_VALUE, visitor); } 第二个参数 FileVisitor
可以很方便地遍历一颗目录树,并操作符合条件的文件;这其中关键的一个方法就是 Files 类的 walkFileTree,其定义如下: public static Path walkFileTree(Path start, FileVisitor FileVisitOption.class), Integer.MAX_VALUE, visitor); } 第二个参数 FileVisitor