Jawaban:
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 FilenameUtils
kelas yang sama untuk mengambil nama dari hasil, penggunaan lastIndexOf
, dll.
lastIndexOf
, gunakan saja file.getParentFile().getName()
.
null
(jika Anda membuat File
instance dengan jalur relatif) - coba file.getAbsoluteFile().getParentFile().getName()
.
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.
Gunakan di bawah ini,
File file = new File("file/path");
String parentPath = file.getAbsoluteFile().getParent();
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));
}
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();
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);
}
Di Groovy:
Tidak perlu membuat File
instance 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 -2
akan mengarah ke entri sebelum yang terakhir, yang dalam hal ini adalahddd
//get the parentfolder name
File file = new File( System.getProperty("user.dir") + "/.");
String parentPath = file.getParentFile().getName();
test.java
mungkin bahkan tidak akan ada di komputer tempat program dijalankan. Ini adalah.class
file terkompilasi yang dijalankan. Jadi ini hanya akan berfungsi jika Anda tahu di manaddd
lokasinya, dalam hal ini tidak ada gunanya menemukannya secara terprogram; hanya kode keras itu.