Структура каталогов 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.

Сначала отсортируйте строки (прежде чем разбивать их).

Как обработать первую строку, очевидно, и я не буду это комментировать. Во второй строке найдите уже построенное дерево и проверьте, существуют ли уже узлы. После того, как вы найдете тот, который не существует, следуйте процедуре, выполненной в первой строке.

Другие вопросы по тегам