Apakah ada padanan Java untuk System.IO.Path.Combine()
dalam C # /. NET? Atau kode apa saja untuk mencapai ini?
Metode statis ini menggabungkan satu atau lebih string ke jalur.
Apakah ada padanan Java untuk System.IO.Path.Combine()
dalam C # /. NET? Atau kode apa saja untuk mencapai ini?
Metode statis ini menggabungkan satu atau lebih string ke jalur.
Jawaban:
Daripada menjaga semua berbasis string, Anda harus menggunakan kelas yang dirancang untuk mewakili jalur sistem file.
Jika Anda menggunakan Java 7 atau Java 8, Anda harus mempertimbangkan untuk menggunakan
java.nio.file.Path
;Path.resolve
dapat digunakan untuk menggabungkan satu jalur dengan yang lain, atau dengan string. KelasPaths
pembantu juga berguna. Sebagai contoh:Jika Anda perlu memenuhi lingkungan pra-Java-7, Anda dapat menggunakan
java.io.File
, seperti ini:Jika Anda ingin mengembalikannya sebagai string nanti, Anda dapat menelepon
getPath()
. Memang, jika Anda benar-benar ingin meniruPath.Combine
, Anda bisa menulis sesuatu seperti:sumber
path2
(mengabaikanpath1
) jikapath2
merupakan jalur absolut. Versi Java akan menjatuhkan yang pertama/
atau\
dan memperlakukannya sebagai jalur relatif.File.getCanonicalPath
.File
di C # jika Anda mau. (Saya berasumsi maksud Anda keberadaanFile
adalah manfaat, yang akan saya setujui.)Di Java 7, Anda harus menggunakan
resolve
:Sementara kelas Path NIO2 mungkin tampak sedikit berlebihan untuk File dengan API berbeda yang tidak perlu, itu sebenarnya secara halus lebih elegan dan kuat.
Perhatikan bahwa
Paths.get()
(seperti yang disarankan oleh orang lain) tidak memiliki kelebihan mengambilPath
, dan melakukanPaths.get(path.toString(), childPath)
TIDAK sama denganresolve()
. DariPaths.get()
dokumen :Fungsi saudari
resolve
adalah yang terbaikrelativize
:sumber
Jawaban utamanya adalah menggunakan objek File. Namun Commons IO memiliki kelas FilenameUtils yang dapat melakukan hal semacam ini, seperti metode concat () .
sumber
Saya tahu ini sudah lama sejak jawaban asli Jon, tetapi saya memiliki persyaratan yang serupa dengan OP.
Dengan cara memperluas solusi Jon saya datang dengan yang berikut, yang akan mengambil satu atau lebih segmen jalan mengambil banyak segmen jalan yang bisa Anda lemparkan ke sana.
Pemakaian
Kode di sini untuk orang lain dengan masalah yang sama
sumber
pendekatan independen platform (menggunakan File.separator, yaitu akan berfungsi tergantung pada sistem operasi tempat kode berjalan:
sumber
Untuk meningkatkan jawaban JodaStephen, Apache Commons IO memiliki FilenameUtils yang melakukan ini. Contoh (di Linux):
Ini platform independen dan akan menghasilkan pemisah apa pun yang dibutuhkan sistem Anda.
sumber
Inilah solusi yang menangani beberapa bagian jalur dan kondisi tepi:
sumber
Jika Anda tidak membutuhkan lebih dari string, Anda dapat menggunakan com.google.common.io.Files
mendapatkan
sumber
Mungkin terlambat ke pesta, tapi aku ingin berbagi pendapat tentang ini. Saya menggunakan pola Builder dan memungkinkan
append
panggilan yang dirantai . Itu dapat dengan mudah diperluas untuk mendukung bekerja denganPath
objek juga.Contoh penggunaan:
Hasilnya
absolute
akan berisi sesuatu seperti:atau bahkan mungkin:
sumber
Ini juga berfungsi di Java 8:
sumber
Solusi ini menawarkan antarmuka untuk menggabungkan fragmen jalur dari array String []. Ini menggunakan java.io.File.File (induk String, String child) :
Maka Anda bisa melakukan:
Pengembalian:
sumber