Вопрос по path, file, jtree, java – TreePath к java.io.File

1

Есть ли простой способ получитьFile (или жеjava.nio.file.Pathв этом отношении) из?TreePath

Например, у вас естьJTree как это:

Green
|---Blue
|---Red
|---Yellow
    |---Purple.jpg
    |---Brown.jpg
    |---Black.jpg

Если у тебя естьTreePath собираетсяBlack.jpgЕсть ли способ получитьFile (или жеPath) с пути?Green\Yellow\Black.jpg

Я могу сделать это долго, беря родителей / детей одного за другим и постепенно строя путь, но я надеялся, что может быть более элегантный способ ...

Ваш Ответ

2   ответа
2

Вы можете сделать это довольно просто с помощью короткого регулярного выражения иtoString метод, вот быстрый пример:

TreePath tp = new TreePath(new String[] {"tmp", "foo", "bar"});
String path = tp.toString().replaceAll("\\]| |\\[|", "").replaceAll(",", File.separator);
File f = new File(path);
// path is now tmp\foo\bar on Windows and tmp/foo/bar on unix

РЕДАКТИРОВАТЬ: объяснение

  1. tp.toString() - это вызывает метод массива, являющийся нативным для строки, поскольку именно так TreePath представляются под обложками.возвращает: [tmp, foo, bar]

  2. replaceAll("\\]| |\\[|", "") - для замены символов используется простое регулярное выражение[ а также] а также удаляет пустые места. Характер| средстваили же в ЯВАS RegEx, так что это значит "если мы встретим левую, правую или пустую скобку, замените ее пустой строкой. " возвращает: tmp,foo,bar

  3. .replaceAll(",", File.separator) - последний шаг, это заменяет запятые собственным разделителем пути к файлу.возвращает: tmp/foo/bar or tmp\foobar

Разум объяснил мне, что"\\]| |\\[|" точно значит? Я'Я видел это раньше, но я никогда не знал, что это такое ... Karlovsky120
Просто регулярное выражение, обновил вопрос с объяснением. Josiah Hester
3

Я думаю, что вы застряли в создании собственного метода.

public static String createFilePath(TreePath treePath) {
    StringBuilder sb = new StringBuilder();
    Object[] nodes = treePath.getPath();
    for(int i=0;i
Я испробовал оба твоих решения, Иосия.s и ug_ 's. Этот работал для меня. Спасибо. Noman Arain

Похожие вопросы