私はこのようなファイルパスを持っています:
/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()してパスの各部分を取得できます。