ファイルウォーカーを使ってファイルシステムの指定された場所の内容を再帰的に読み取る小さなアプリケーションを作成しようとしています。私はこのコードを持っています:なぜリストは変わらないのですか?
/* Imports here */
public class App {
private static Scanner inp;
public static List<Node> Tree = new ArrayList<Node>();
public static void main(String[] args) {
String FFiles;
System.out.print("Enter root directory: ");
inp = new Scanner(System.in);
FileSystem fileSystem = FileSystems.getDefault();
Path rootPath = fileSystem.getPath(inp.nextLine());
FileVisitor<Path> simpleFileVisitor = new SimpleFileVisitor<Path>() {
public Path VisitedDirectory = rootPath;
public List<Node> files = new ArrayList<Node>();
@Override
public FileVisitResult preVisitDirectory(Path dir,BasicFileAttributes attrs) throws IOException {
if (dir != VisitedDirectory) {
Node directory = new Node(dir.getFileName().toString(), "directory", files, dir.toString());
files.add(directory);
Node VisDirectory = new Node(VisitedDirectory.getFileName().toString(), "directory", files, dir.toString());
Tree.add(VisDirectory);
files.clear();
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path visitedFile,BasicFileAttributes fileAttributes) throws IOException {
Node file = new Node(visitedFile.getFileName().toString(), "file", null, visitedFile.toString());
files.add(file);
return FileVisitResult.CONTINUE;
}
};
try {
Files.walkFileTree(rootPath, simpleFileVisitor);
} catch (IOException ioe) {
ioe.printStackTrace();
}
for (Node n : Tree) {
System.out.println(n);
}
}
そして、ここに質問があります:なぜそれはディレクトリだけを読む(表示する)のですか? P.SのNodeクラスは、変数だけのカップルであるので、同じように宣言:
public class Node {
@Override
public String toString() {
return "Node [path=" + path + "]";
}
public String name;
public String path;
public String type;
public List<Node> children = new ArrayList<Node>();
public Node(String name, String type, List<Node> children, String path) {
this.name = name;
this.type = type;
this.children = children;
this.path = path;
}
}
visitFileメソッドにブレークポイントを配置します。実行がヒットするかどうかを確認します。訪問先ディレクトリのツリーリストにも追加します。訪問ファイルでは、 – efekctive