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.
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() :
Ada beberapa varian untuk mempertahankan / melepaskan awalan dan pemisah akhir. Anda dapat menggunakan FilenameUtilskelas yang sama untuk mengambil nama dari hasil, penggunaan lastIndexOf, dll.
Ini memunculkan ArrayOutOfBoundsException jika Anda sudah berada di lokasi root - "/" -
Jnmgr
2
File file =newFile("C:/aaa/bbb/ccc/ddd/test.java");File curentPath =newFile(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;
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
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.Jawaban:
Gunakan
File
'sgetParentFile()
metode danString.lastIndexOf()
untuk mengambil hanya direktori induk langsung.Komentar Mark adalah solusi yang lebih baik daripada
lastIndexOf()
:Solusi ini hanya berfungsi jika file memiliki file induk (misalnya, dibuat melalui salah satu konstruktor file yang mengambil induk
File
). KapangetParentFile()
nol Anda harus menggunakanlastIndexOf
, atau menggunakan sesuatu seperti Apache Commons 'FileNameUtils.getFullPath()
:Ada beberapa varian untuk mempertahankan / melepaskan awalan dan pemisah akhir. Anda dapat menggunakan
FilenameUtils
kelas yang sama untuk mengambil nama dari hasil, penggunaanlastIndexOf
, dll.sumber
lastIndexOf
, gunakan sajafile.getParentFile().getName()
.null
(jika Anda membuatFile
instance dengan jalur relatif) - cobafile.getAbsoluteFile().getParentFile().getName()
.f.getParentFile()
bisa jadi nol, jadi Anda harus memeriksanya.sumber
Gunakan di bawah ini,
sumber
Di Java 7 Anda memiliki api Paths baru . Solusi modern dan terbersih adalah:
Hasilnya adalah:
sumber
Jika Anda hanya memiliki jalur String dan tidak ingin membuat objek File baru, Anda dapat menggunakan sesuatu seperti:
sumber
jika Anda perlu menambahkan folder "ddd" dengan jalur lain, gunakan;
sumber
Dari java 7 saya lebih suka menggunakan Path. Anda hanya perlu memasukkan jalur ke:
dan buat beberapa metode get:
sumber
Di Groovy:
Tidak perlu membuat
File
instance untuk mengurai string secara groovy. Itu dapat dilakukan sebagai berikut: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
sumber
sumber