私はこのようなファイルパスを持っています:
/home/Dara/Desktop/foo/bar/baz/qux/file.txt
Javaでは、上位2つのフォルダーを取得できるようにしたいと思います。つまり。baz/qux
ファイルパスの長さやオペレーティングシステムに関係なく(やなどのファイルパス区切り文字/
:
)\
。subpath()
でメソッドを使用しようとしましPaths
たが、ファイルパスの長さを取得する一般的な方法が見つからないようです。
まだきれいではありませんが、方向性は推測できます。
File parent = file.getParentFile();
File parent2 = parent.getParentFile();
parent2.getName() + System.getProperty("path.separator") + parent.getName()
別のオプション:
final int len = path.getNameCount();
path.subpath(len - 3, len - 1)
IllegalArgumentException
編集:コードをより堅牢にするには、lenをチェックするか、をキャッチする必要があります。
メソッドgetNameCount()
とgetName(int index)
のjava.nio.Path
はあなたを助けるはずです:
File f = new File("/home/Dara/Desktop/foo/bar/baz/qux/file.txt");
Path p = f.toPath();
int pathElements = p.getNameCount();
String topOne = p.getName(pathElements-2).toString();
String topTwo = p.getName(pathElements-3).toString();
getNameCount()
のインデックスとして使用する前に、の結果の有効性を確認する必要があることに注意してくださいgetName()
。
サブパスとgetNameCountを使用します。
Path myPath = Paths.get("/home/Dara/Desktop/foo/bar/baz/qux/file.txt");
Path subPath = myPath.subpath(myPath.getNameCount() -3, myPath.getNameCount() -1);
split
文字列だけを使用することも、を使用することもできStringTokenizer
ます。
File.getParent()
ファイル名を削除します。
そして、あなたが得るパスセパレーター:System.getProperty("file.separator")
。
次に、を使用String.split()
してパスの各部分を取得できます。