Di Jawa, diberikan a java.net.URL
atau a String
dalam bentuk http://www.example.com/some/path/to/a/file.xml
, apa cara termudah untuk mendapatkan nama file, minus ekstensi? Jadi, dalam contoh ini, saya mencari sesuatu yang kembali "file"
.
Saya dapat memikirkan beberapa cara untuk melakukan ini, tetapi saya sedang mencari sesuatu yang mudah dibaca dan singkat.
Jawaban:
Alih-alih menciptakan kembali roda, bagaimana menggunakan Apache commons-io :
sumber
URL#getPath
danString#substring
atauPath#getFileName
atauFile#getName
).sumber
substring()
http://example.org/file#anchor
,http://example.org/file?p=foo&q=bar
atauhttp://example.org/file.xml#/p=foo&q=bar
String url = new URL(original_url).getPath()
dan menambahkan kasus khusus untuk nama file yang tidak mengandung.
maka ini berfungsi dengan baik.Jika Anda tidak perlu menyingkirkan ekstensi file, berikut adalah cara untuk melakukannya tanpa menggunakan manipulasi String yang rentan kesalahan dan tanpa menggunakan pustaka eksternal. Bekerja dengan Java 1.7+:
sumber
URI.getPath()
mengembalikan aString
, jadi saya tidak melihat mengapa itu tidak berhasilgetPath
, dan gunakan kelebihan beban URI.Paths.get(new URI(url))
? Itu sepertinya tidak berhasil bagi sayaIni harus tentang memotongnya (saya akan menyerahkan penanganan kesalahan kepada Anda):
sumber
http://www.example.com/
atauhttp://www.example.com/folder/
)lastIndexOf
tidak bekerja seperti ini. Namun niatnya jelas.sumber
Satu liner:
Kode lengkap (dalam scala REPL):
Catatan :
URI#gePath
sudah cukup cerdas untuk menghapus parameter kueri dan skema protokol. Contoh:sumber
Dapatkan Nama File dengan Ekstensi , tanpa Ekstensi , hanya Ekstensi dengan hanya 3 baris:
Hasil Log:
Semoga ini bisa membantu Anda.
sumber
Saya datang dengan ini:
sumber
Ada beberapa cara:
Java 7 File I / O:
Apache Commons:
Menggunakan Jersey:
Substring:
sumber
Paths.get(new URL(strUrl).getFile()).getFileName().toString();
Terima kasih atas idenya!Sederhana saja:
sumber
url.getFile()
denganurl.toString()
dan berfungsi dengan#
di jalan.sumber
Berikut adalah cara paling sederhana untuk melakukannya di Android. Saya tahu ini tidak akan berfungsi di Jawa tetapi mungkin membantu pengembang aplikasi Android.
sumber
Buat objek URL dari String. Ketika pertama kali Anda memiliki objek URL, ada metode untuk mengeluarkan semua informasi yang Anda butuhkan dengan mudah.
Saya bisa sangat merekomendasikan situs web Javaalmanac yang memiliki banyak contoh, tetapi yang telah dipindahkan. Anda mungkin menemukan http://exampledepot.8waytrips.com/egs/java.io/File2Uri.html menarik:
sumber
Jika Anda hanya ingin mendapatkan nama file dari java.net.URL (tidak termasuk parameter kueri), Anda dapat menggunakan fungsi berikut:
Misalnya, URL masukan ini:
Akan diterjemahkan ke String keluaran ini:
sumber
Saya telah menemukan bahwa beberapa url ketika disahkan langsung untuk
FilenameUtils.getName
mengembalikan hasil yang tidak diinginkan dan ini perlu dibungkus untuk menghindari eksploitasi.Sebagai contoh,
kembali
yang saya ragu ada orang yang mau mengizinkan.
Fungsi berikut tampaknya berfungsi dengan baik, dan menunjukkan beberapa kasus uji ini, dan kembali
null
ketika nama file tidak dapat ditentukan.Ini dibungkus dengan beberapa test case sederhana dalam contoh berikut:
sumber
Url dapat memiliki parameter pada akhirnya, ini
sumber
/
dapat muncul dalam fragmen. Anda akan mengekstrak hal-hal yang salah.The
Url
objek di urllib memungkinkan Anda untuk mengakses file unescaped jalan ini. Berikut ini beberapa contohnya:sumber
Jawaban andy diulang menggunakan split ():
sumber
sumber
Bagaimana dengan ini:
sumber
Untuk mengembalikan nama file tanpa ekstensi dan tanpa parameter gunakan yang berikut:
Untuk mengembalikan nama file dengan ekstensi tanpa params gunakan ini:
sumber
Di luar semua metode canggih, trik sederhana saya adalah
StringTokenizer
:sumber
Jika Anda menggunakan Spring , ada penolong untuk menangani URI. Ini solusinya:
sumber
kembalikan File baru (Uri.parse (url) .getPath ()). getName ()
sumber
sumber
Saya memiliki masalah yang sama, dengan masalah Anda. Saya menyelesaikannya dengan ini:
sumber
import java.io. *;
Saya harap ini akan membantu Anda.
sumber