有没有简单的方法可以从File(或java.nio.file.Path就此而言)获得TreePath?
File
java.nio.file.Path
TreePath
例如,您有一个JTree像这样的:
JTree
Green |---Blue |---Red |---Yellow |---Purple.jpg |---Brown.jpg |---Black.jpg
如果您TreePath打算去Black.jpg,有没有办法得到File(或Path)路径Green\Yellow\Black.jpg?
Black.jpg
Path
Green\Yellow\Black.jpg
我可以做到这一点很长的路要走,一个接一个地带父母/孩子,一点一点地构建路径,但是我希望可以有一种更优雅的方式…
您可以使用简短的正则表达式和toString方法非常简单地执行此操作,以下是一个简单的示例:
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
编辑:解释
tp.toString()-这将调用数组的本机到字符串方法,因为这是在底层表示TreePath的方式。 返回 :[tmp, foo, bar]
tp.toString()
[tmp, foo, bar]
replaceAll("\\]| |\\[|", "")-使用简单的正则表达式替换字符[,]并删除空格。该字符|表示 或具有 JAVA的RegEx风格,因此表示“ 如果遇到左括号,右括号或空白,请将其替换为空字符串” 。 返回 :tmp,foo,bar
replaceAll("\\]| |\\[|", "")
[
]
|
tmp,foo,bar
.replaceAll(",", File.separator)-最后一步,用本地文件路径分隔符替换逗号。 返回 :tmp/foo/bar or tmp\foobar
.replaceAll(",", File.separator)
tmp/foo/bar or tmp\foobar