Cara mendapatkan nama direktori induk dari file tertentu


111

Cara mendapatkan ddddari nama jalur tempat test.java berada.

File file = new File("C:/aaa/bbb/ccc/ddd/test.java");

1
Apakah ini untuk file generik, atau Anda mencoba untuk mendapatkan direktori induk dari file sumber Anda? Jika yang terakhir, saya tidak yakin Anda memahami kompilasi Java. Saat runtime, test.javamungkin bahkan tidak akan ada di komputer tempat program dijalankan. Ini adalah .classfile terkompilasi yang dijalankan. Jadi ini hanya akan berfungsi jika Anda tahu di mana dddlokasinya, dalam hal ini tidak ada gunanya menemukannya secara terprogram; hanya kode keras itu.
Mark Peters

Jawaban:


141

Gunakan File's getParentFile()metode dan String.lastIndexOf()untuk mengambil hanya direktori induk langsung.

Komentar Mark adalah solusi yang lebih baik daripada lastIndexOf():

file.getParentFile().getName();

Solusi ini hanya berfungsi jika file memiliki file induk (misalnya, dibuat melalui salah satu konstruktor file yang mengambil induk File). Kapan getParentFile()nol Anda harus menggunakan lastIndexOf, atau menggunakan sesuatu seperti Apache Commons 'FileNameUtils.getFullPath() :

FilenameUtils.getFullPathNoEndSeparator(file.getAbsolutePath());
=> C:/aaa/bbb/ccc/ddd

Ada beberapa varian untuk mempertahankan / melepaskan awalan dan pemisah akhir. Anda dapat menggunakan FilenameUtilskelas yang sama untuk mengambil nama dari hasil, penggunaan lastIndexOf, dll.


14
Anda tidak perlu lastIndexOf, gunakan saja file.getParentFile().getName().
Mark Peters

13
Untuk berjaga-jaga. Jika kembali null(jika Anda membuat Fileinstance dengan jalur relatif) - coba file.getAbsoluteFile().getParentFile().getName().
nidu

1
@MarkPeters Itu hanya berfungsi ketika file dibuat dengan File induk, yang saya tebak relatif jarang.
Dave Newton

20
File f = new File("C:/aaa/bbb/ccc/ddd/test.java");
System.out.println(f.getParentFile().getName())

f.getParentFile() bisa jadi nol, jadi Anda harus memeriksanya.


1
Hanya untuk memastikan, hasilnya adalah sebagai berikut: C: / aaa / bbb / ccc / ddd
Guy Avraham

16

Gunakan di bawah ini,

File file = new File("file/path");
String parentPath = file.getAbsoluteFile().getParent();

Perlu diperhatikan bahwa metode ini harus memiliki kumpulan induk, meskipun file yang mendasarinya tidak.
Laju

13

Di Java 7 Anda memiliki api Paths baru . Solusi modern dan terbersih adalah:

Paths.get("C:/aaa/bbb/ccc/ddd/test.java").getParent().getFileName();

Hasilnya adalah:

C:/aaa/bbb/ccc/ddd

5

Jika Anda hanya memiliki jalur String dan tidak ingin membuat objek File baru, Anda dapat menggunakan sesuatu seperti:

public static String getParentDirPath(String fileOrDirPath) {
    boolean endsWithSlash = fileOrDirPath.endsWith(File.separator);
    return fileOrDirPath.substring(0, fileOrDirPath.lastIndexOf(File.separatorChar, 
            endsWithSlash ? fileOrDirPath.length() - 2 : fileOrDirPath.length() - 1));
}

4
Ini memunculkan ArrayOutOfBoundsException jika Anda sudah berada di lokasi root - "/" -
Jnmgr

2
File file = new File("C:/aaa/bbb/ccc/ddd/test.java");
File curentPath = new File(file.getParent());
//get current path "C:/aaa/bbb/ccc/ddd/"
String currentFolder= currentPath.getName().toString();
//get name of file to string "ddd"

jika Anda perlu menambahkan folder "ddd" dengan jalur lain, gunakan;

String currentFolder= "/" + currentPath.getName().toString();

1

Dari java 7 saya lebih suka menggunakan Path. Anda hanya perlu memasukkan jalur ke:

Path dddDirectoryPath = Paths.get("C:/aaa/bbb/ccc/ddd/test.java");

dan buat beberapa metode get:

public String getLastDirectoryName(Path directoryPath) {
   int nameCount = directoryPath.getNameCount();
   return directoryPath.getName(nameCount - 1);
}

0

Di Groovy:

Tidak perlu membuat Fileinstance untuk mengurai string secara groovy. Itu dapat dilakukan sebagai berikut:

String path = "C:/aaa/bbb/ccc/ddd/test.java"
path.split('/')[-2]  // this will return ddd

Pemisahan akan membuat larik [C:, aaa, bbb, ccc, ddd, test.java]dan indeks -2akan mengarah ke entri sebelum yang terakhir, yang dalam hal ini adalahddd


0
    //get the parentfolder name
    File file = new File( System.getProperty("user.dir") + "/.");
    String parentPath = file.getParentFile().getName();
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.