File f =newFile("C:\\Hello\\AnotherFolder\\The File Name.PDF");System.out.println(f.getName());
menggunakan metode String :
File f =newFile("C:\\Hello\\AnotherFolder\\The File Name.PDF");System.out.println(f.getAbsolutePath().substring(f.getAbsolutePath().lastIndexOf("\\")+1));
Adakah yang melakukan perbandingan kinerja pada berbagai metode dalam pertanyaan ini?
naksir
@ Crush Saya tidak berpikir bahwa Paths.getmengakses sistem file jadi tidak akan mengharapkan kinerja secara material berbeda dari substring / indexOf.
assylias
7
Kenapa tidak ada di Android? aneh.
Android developer
12
Ya, Path mengatasi masalah ketergantungan platform pada slash / backslash, tetapi hanya jika path file berasal dari mesin yang sama (atau platform). Pertimbangkan ini: Anda mengunggah file dari Internet Explorerdan memiliki path "C:\\Hello\\AnotherFolder\\The File Name.PDF"tetapi kode Anda bekerja pada mesin Unix / Linux maka p.getFileName()akan mengembalikan seluruh path, bukan hanya The File Name.PDF.
Ini akan mengambil indeks yang terakhir \di Anda Stringdan mengekstrak semua yang datang setelah itu fileName.
Jika Anda memiliki Stringdengan pemisah yang berbeda, sesuaikan lastIndexOfuntuk menggunakan pemisah itu. (Bahkan ada kelebihan yang menerima keseluruhan Stringsebagai pemisah.)
Saya telah menghilangkannya dalam contoh di atas, tetapi jika Anda tidak yakin dari mana Stringasalnya atau apa yang terkandung di dalamnya, Anda akan ingin memvalidasi bahwa lastIndexOfmengembalikan nilai yang tidak negatif karena Javadoc menyatakan itu akan kembali
Anda tidak boleh menggunakan salah satu dari mereka karena tergantung platform /di unix dan \`(AND THERE IS A BUG IN THE MARKDOWN PARSER HERE) on windows. You can't know. Use another solution like File` atau Paths.
Otomatis
3
Apakah File.separatorplatform juga tergantung? Atau apakah ini akan berhasil ... String strPath = path.substring(path.lastIndexOf(File.separator)+1, path.length());
Jonathan
File.separator & File.separatorChar keduanya "/" pada versi JIX UND / Linux / macOS, dan keduanya "\" pada versi Windows.
可 可 Jacky
2
File.separatortidak akan selalu berfungsi di sini karena di Windows nama file dapat dipisahkan dengan "/"atau "\\".
DodgyCodeException
10
Jawaban lain tidak cukup berfungsi untuk skenario spesifik saya, di mana saya membaca jalur yang berasal dari OS yang berbeda dengan yang saya gunakan saat ini. Untuk menguraikan, saya menyimpan lampiran email yang disimpan dari platform Windows di server Linux. Nama file yang dikembalikan dari JavaMail API adalah sesuatu seperti 'C: \ temp \ hello.xls'
Anda dapat menggunakan objek FileInfo untuk mendapatkan semua informasi file Anda.
FileInfo f =newFileInfo(@"C:\Hello\AnotherFolder\The File Name.PDF");MessageBox.Show(f.Name);MessageBox.Show(f.FullName);MessageBox.Show(f.Extension);MessageBox.Show(f.DirectoryName);
Jawaban:
cukup gunakan File.getName ()
menggunakan metode String :
sumber
Alternatif menggunakan
Path
(Java 7+):Perhatikan bahwa pemisahan string
\\
bergantung pada platform karena pemisah file mungkin bervariasi.Path#getName
urus masalah itu untuk Anda.sumber
Paths.get
mengakses sistem file jadi tidak akan mengharapkan kinerja secara material berbeda dari substring / indexOf.Internet Explorer
dan memiliki path"C:\\Hello\\AnotherFolder\\The File Name.PDF"
tetapi kode Anda bekerja pada mesin Unix / Linux makap.getFileName()
akan mengembalikan seluruh path, bukan hanyaThe File Name.PDF
.toString()
sangat canggung.Menggunakan
FilenameUtils
di Apache Commons IO :sumber
Mengingat yang
String
Anda tanyakan adalahkita perlu mengekstrak semuanya setelah pemisah terakhir, yaitu.
\
. Itulah yang kami minati.Anda dapat melakukan
Ini akan mengambil indeks yang terakhir
\
di AndaString
dan mengekstrak semua yang datang setelah itufileName
.Jika Anda memiliki
String
dengan pemisah yang berbeda, sesuaikanlastIndexOf
untuk menggunakan pemisah itu. (Bahkan ada kelebihan yang menerima keseluruhanString
sebagai pemisah.)Saya telah menghilangkannya dalam contoh di atas, tetapi jika Anda tidak yakin dari mana
String
asalnya atau apa yang terkandung di dalamnya, Anda akan ingin memvalidasi bahwalastIndexOf
mengembalikan nilai yang tidak negatif karena Javadoc menyatakan itu akan kembalisumber
Sejak 1.7
sumber
Anda dapat menggunakan path = C: \ Hello \ AnotherFolder \ TheFileName.PDF
sumber
/
di unix dan\`(AND THERE IS A BUG IN THE MARKDOWN PARSER HERE) on windows. You can't know. Use another solution like
File` atauPaths
.File.separator
platform juga tergantung? Atau apakah ini akan berhasil ...String strPath = path.substring(path.lastIndexOf(File.separator)+1, path.length());
File.separator
tidak akan selalu berfungsi di sini karena di Windows nama file dapat dipisahkan dengan"/"
atau"\\"
.Jawaban lain tidak cukup berfungsi untuk skenario spesifik saya, di mana saya membaca jalur yang berasal dari OS yang berbeda dengan yang saya gunakan saat ini. Untuk menguraikan, saya menyimpan lampiran email yang disimpan dari platform Windows di server Linux. Nama file yang dikembalikan dari JavaMail API adalah sesuatu seperti 'C: \ temp \ hello.xls'
Solusi saya berakhir dengan:
sumber
Mempertimbangkan kasus bahwa Java adalah Multiplatform:
sumber
Suatu metode tanpa ketergantungan dan mengurus .. , . dan duplikat pemisah.
Kasus cobaan:
Mungkin getFileName agak membingungkan, karena ia mengembalikan nama direktori juga. Ini mengembalikan nama file atau direktori terakhir di jalur.
sumber
ekstrak nama file menggunakan java regex *.
sumber
getFileName () metode java.nio.file.Path digunakan untuk mengembalikan nama file atau direktori yang ditunjuk oleh objek path ini.
Path getFileName ()
Sebagai referensi:
https://www.geeksforgeeks.org/path-getfilename-method-in-java-with-examples/
sumber
Anda dapat menggunakan objek FileInfo untuk mendapatkan semua informasi file Anda.
sumber