簡體   English   中英

如何知道FileVisitor中訪問最后一個文件的時間?

[英]How to know when the last file is being visited in FileVisitor?

我需要對目錄中訪問過的文件做一些事情。 我怎么知道當前對visitFile()調用是否是最后一次?

(我只想列出指定目錄下的所有文件和目錄。要做到這一點,我介紹了一個depth領域我FileVisitor實施,並在preVisitDirectory我回到SKIP_SUBTREE如果深度大於0(然后遞增depth 。)問題是我不知道何時將depth重置為0,因為當我用另一個目錄的FileVisitor實現調用walkFileTree時, depth已經> 0並且它只列出給定的目錄。)

如何僅在兩個方法中保持深度, preVisitDirectorypostVisitDirectory 你會增加depthpreVisitDirectory和遞減它postVisitDirectory 您可能必須將depth初始化為-1 ,以便在開始目錄中具有depth == 0 這樣,你將永遠擁有正確的depth

編輯:如果從visitFile返回SKIP_SIBLINGS ,而不是從preVisitDirectory ,則仍會調用postVisitDirectory

這是一個代碼示例:

public class Java7FileVisitorExample {

public void traverseFolder(Path start){
    try {
        Files.walkFileTree(start, new SimpleFileVisitor<Path>() {

            private int depth = -1;

            @Override
            public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
                    throws IOException {
                System.out.println("preVisitDirectory(" + dir + ")");
                depth++;
                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
                    throws IOException {
                if (depth > 0) {
                    return FileVisitResult.SKIP_SIBLINGS;
                }

                System.out.println("visitFile(" + file + ", " + attrs + "): depth == " + depth);

                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult postVisitDirectory(Path dir, IOException e)
                    throws IOException {
                if (e == null) {
                    depth--;
                    System.out.println("postVisitDirectory(" + dir + ")");
                    return FileVisitResult.CONTINUE;
                } else {
                    throw e;
                }


            }
        });
    } catch (IOException ex) {
        Logger.getAnonymousLogger().throwing(getClass().getName(), 
                "traverseFolder", ex);
    }
}

public static void main(String... args) {
    Path start = Paths.get("/Book/Algorithm");
    new Java7FileVisitorExample().traverseFolder(start);
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM