Структура каталогов Java JTree из путей к файлам
Я пытался обдумать это, так что, возможно, некоторые из вас могут мне помочь. У меня есть список файлов с их полными путями (это просто строки, файлы находятся на другом компьютере), например:
C:\a\b\c\file1.txt
C:\a\b\c\file2.txt
C:\a\d\file3.txt
C:\e\file4.txt
Я хочу создать Jtree, чтобы показать структуру каталогов следующим образом:
C:
a
b
c
file1.txt
file2.txt
d
file3.tct
e
file4.txt
Я разделил строку на разделитель, поэтому я получил список массивов, например:
"C:","a","b","c","file1.txt"
"C:","a","b","c","file2.txt"
"C:","a","d","file3.txt"
"C:","e","file4.txt"
Теперь я хочу добавить им индекс за раз, но если значение уже существует на этом уровне, то перейти к следующему индексу. то есть он добавил бы первый массив, затем во второй массив он перешел бы на уровень 0 дерева, там уже существует "C:", поэтому перейдите на уровень 1 дерева и индекс 1 массива. У меня есть проблемы в том, что я не уверен, как перемещаться по дереву таким образом.
Любые предложения и или альтернативные реализации?
3 ответа
Позволять File
выполнять работу по разбору и поддержанию путей. Как вы хотите отобразить файлы в JTree
Вы также можете создать соответствующий TreeModel
такие как FileTreeModel
цитируется здесь. Потому что это реализует TreeModel
, это может быть установлено как JTree
модель, и тогда у вас будет простой старый стандарт JTree
"Вы можете использовать любой File
в любой смонтированной файловой системе в качестве корневого, например:
TreeModel model = new FileTreeModel(new File(System.getProperty("user.dir")));
JTree tree = new JTree(model);
Я не уверен, является ли FileTreeModel лучшим способом - он сканирует целые каталоги. Из того, что вы написали, я думаю, вы хотите отображать только пути из вашего списка.
Вы можете добиться этого с помощью TreePathsTreeModel, описанного здесь: Как я могу показать реестр Windows в jTree?
Вам просто нужно преобразовать пути к файлам из строк в объекты TreePath.
Сначала отсортируйте строки (прежде чем разбивать их).
Как обработать первую строку, очевидно, и я не буду это комментировать. Во второй строке найдите уже построенное дерево и проверьте, существуют ли уже узлы. После того, как вы найдете тот, который не существует, следуйте процедуре, выполненной в первой строке.