ディレクトリからファイルをロードする Tree オブジェクトを作成しました。preVisistDirectory は、visitFile がツリーを埋めるために追跡できるよりも速く反復します。ファイルが読み取られ、次のディレクトリを読み取るためにツリー項目が作成された後に呼び出される変数を作成しようとしましたが、機能しませんでした。誰?
public static void main(String[] args) {
// getfiles(filepath,"*html");
System.out.println("Help -> setHelp() -> Path = " + filepath);
Display display = new Display();
Shell shell = new Shell(display, SWT.CLOSE | SWT.RESIZE);
shell.setText("Tree Object. ");
shell.setSize(400, 300);
final Tree tree = new Tree(shell, SWT.BORDER | SWT.SINGLE);
tree.setSize(290, 290);
try {
Files.walkFileTree(filepath, new SimpleFileVisitor<Path>() {
TreeItem parent, child;
int baselevel = filepath.getNameCount();
public FileVisitResult preVisitDirectory(Path dir,
BasicFileAttributes attrs) {
System.out.println("Help -> FileVisitResults -> DirectoryName = " + dir.getFileName().toString());
System.out.println("Help -> FileVisitResults -> Find files and Directories : " + dir.getName(0));
System.out.println("Help -> FileVisitResults -> nameCount : " + (dir.getNameCount() - baselevel));
System.out.println("Help -> FileVisitResults -> baselevel = : " + (dir.getNameCount() - baselevel));
if (dir.getNameCount() - baselevel + 1 > 1) {
if (dir.getNameCount() - baselevel == 1) {
parent = null;
}
if (parent != null) {
child = new TreeItem(parent, 0);
child.setText(dir.getFileName().toString());
parent = child;
}
if (parent == null) {
child = new TreeItem(tree, 0);
child.setText(dir.getFileName().toString());
parent = child;
}
}
return FileVisitResult.CONTINUE;
}
public FileVisitResult visitFile(Path dir,
BasicFileAttributes attrs) {
System.out.println("Help -> FileVisitResults -> FileName = " + dir);
if (dir.getNameCount() - baselevel + 1 > 1) {
if (dir.getNameCount() - baselevel == 1) {
parent = null;
}
if (parent != null) {
child = new TreeItem(parent, 0);
child.setText(dir.getFileName().toString());
}
if (parent == null) {
child = new TreeItem(tree, 0);
child.setText(dir.getFileName().toString());
}
}
return FileVisitResult.CONTINUE;
}
});
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
回答:
例外はありませんが、ディレクトリを高速にループし、ファイルをディレクトリに追加できます。そのため、2 つのファイルの後に vistitFile によって追加されるファイルが 5 つある場合、preDirectoryVisit は親を次のディレクトリに設定するため、visitFile は残りのファイルをスキップします。
回答 2:
ツリーは、preVisitDirectory メソッドを使用してディレクトリをロードします。このメソッドは、ディレクトリを高速に反復し、その後、visitFile がファイルを反復します。見つかったディレクトリは、親ツリー項目として使用される親変数に格納され、ファイルを子ツリー項目として追加するためです。