9

私はこのようなファイルパスを持っています:

/home/Dara/Desktop/foo/bar/baz/qux/file.txt

Javaでは、上位2つのフォルダーを取得できるようにしたいと思います。つまり。baz/quxファイルパスの長さやオペレーティングシステムに関係なく(やなどのファイルパス区切り文字/ :\subpath()でメソッドを使用しようとしましPathsたが、ファイルパスの長さを取得する一般的な方法が見つからないようです。

4

5 に答える 5

11

まだきれいではありませんが、方向性は推測できます。

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をチェックするか、をキャッチする必要があります。

于 2013-03-14T13:24:28.380 に答える
5

メソッド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()

于 2013-03-14T13:39:38.230 に答える
3

サブパスとgetNameCountを使用します。

    Path myPath = Paths.get("/home/Dara/Desktop/foo/bar/baz/qux/file.txt");
    Path subPath = myPath.subpath(myPath.getNameCount() -3, myPath.getNameCount() -1);
于 2017-09-24T10:18:32.320 に答える
2

split文字列だけを使用することも、を使用することもできStringTokenizerます。

于 2013-03-14T13:21:59.167 に答える
1

File.getParent()ファイル名を削除します。

そして、あなたが得るパスセパレーター:System.getProperty("file.separator")

次に、を使用String.split()してパスの各部分を取得できます。

于 2013-03-14T13:23:44.910 に答える