Cara Mendapatkan Sambungan Fail dari File di Java

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kami akan menunjukkan cara mendapatkan peluasan fail secara terprogram di Java. Kami akan memberi tumpuan kepada tiga pendekatan utama untuk masalah ini.

Dalam pelaksanaan kami, watak-watak selepas final ' .' akan dikembalikan.

Oleh itu, sebagai contoh cepat, jika nama fail kami adalah jarvis.txt maka ia akan mengembalikan String " txt" sebagai pelanjutan fail.

2. Mendapatkan Sambungan Fail

Untuk setiap pendekatan, kami akan belajar bagaimana menerapkannya dan menindaklanjuti apa yang berlaku dalam dua kes khas:

  • apabila nama fail tidak mempunyai pelanjutan, seperti fail makefile
  • dan jika nama fail hanya terdiri daripada peluasan, seperti .gitignore atau .DS_Store.

2.1. Pendekatan Pengendalian Rentetan Mudah

Dengan pendekatan ini, kami akan menggunakan pendekatan pengendalian String yang mudah untuk mencari peluasan:

public Optional getExtensionByStringHandling(String filename) { return Optional.ofNullable(filename) .filter(f -> f.contains(".")) .map(f -> f.substring(filename.lastIndexOf(".") + 1)); } 

Kaedah ini akan memeriksa titik '.' kejadian dalam nama fail yang diberikan.

Sekiranya ia wujud, maka ia akan menemui kedudukan terakhir titik '.' dan mengembalikan watak selepas itu, watak selepas titik terakhir '.' dikenali sebagai peluasan fail.

Kes Khas:

  1. Tiada peluasan - kaedah ini akan mengembalikan String kosong
  2. Hanya peluasan - kaedah ini akan mengembalikan Rentetan selepas titik, misalnya "gitignore"

2.2. FilenameUtils.getExtension dari Apache Commons IO

Dalam pendekatan kedua, kami akan menemui pelanjutan menggunakan kelas utiliti yang disediakan oleh perpustakaan Apache Commons IO:

public String getExtensionByApacheCommonLib(String filename) { return FilenameUtils.getExtension(filename); }

Di sini, bukannya nama fail, kita juga dapat menentukan jalan lengkap ke fail seperti " C: /baeldung/com/demo.java ".

Kaedah getExtension (String) akan memeriksa sama ada nama fail yang diberikan kosong atau tidak.

Sekiranya nama fail kosong atau kosong, getExtension (String nama fail) akan mengembalikan contoh yang diberikan Jika tidak, ia mengembalikan peluasan nama fail.

Untuk melakukan ini, ia menggunakan kaedah indexOfExtension (String) yang pada gilirannya menggunakan lastIndexof (char) untuk mencari kejadian terakhir dari '.'. Kaedah ini kedua-duanya disediakan oleh FilenameUtils .

Kaedah ini juga memeriksa bahawa tidak ada pemisah direktori setelah titik terakhir dengan menggunakan indexOfLastSeparator kaedah lain (String), yang akan menangani fail dalam format Unix atau Windows.

Kes Khas:

  1. Tiada peluasan - kaedah ini akan mengembalikan rentetan kosong.
  2. Hanya peluasan - kaedah ini akan mengembalikan Rentetan selepas titik, misalnya "gitignore"

2.3. Menggunakan Perpustakaan Jambu Batu

Dalam pendekatan terakhir ini, kami akan menggunakan perpustakaan Jambu untuk mencari peluasannya.

Untuk menambahkan perpustakaan Jambu Batu, kami dapat menambahkan kebergantungan berikut ke pom.xml kami :

 com.google.guava guava 24.1.1-jre 

Untuk ketergantungan terkini, kami boleh memeriksa Maven Central.

Setelah menambahkan perpustakaan, kita boleh menggunakan kaedah getFileExtension :

public String getExtensionByGuava(String filename) { return Files.getFileExtension(filename); } 

Kaedah getFileExtension (String) terlebih dahulu akan memeriksa sama ada nama fail yang diberikan kosong.

Sekiranya nama fail tidak kosong, maka ia akan membuat instance File dengan menukar nama fail yang diberikan menjadi nama path abstrak dan memanggil kaedah getName () File di atasnya, yang akan mengembalikan nama fail yang dilambangkan dengan nama path abstrak ini, atau rentetan kosong jika nama fail yang diberikan kosong.

Berdasarkan nilai pulangan ini, ia mengambil indeks kejadian terakhir dari '.' dengan menggunakan kaedah String class inbuilt lastIndexOf (char) .

Kes Khas:

  1. Tiada peluasan - kaedah ini akan mengembalikan String kosong
  2. Hanya peluasan - kaedah ini akan mengembalikan Rentetan selepas titik, misalnya "gitignore"

3. Kesimpulannya

Semasa memilih antara Apache Commons dan Guava , sementara kedua perpustakaan mempunyai beberapa ciri umum dan mereka juga mempunyai fungsi yang tidak ada dalam pilihan mereka.

Ini bermaksud bahawa jika fungsi tertentu diperlukan, pilih yang memilikinya. Jika tidak, jika diperlukan lebih banyak senario tersuai, pilih yang paling sesuai dengan apa yang anda perlukan dan jangan ragu untuk membungkus dengan pelaksanaan anda sendiri untuk mendapatkan hasil yang diinginkan.

Juga, periksa semua contoh dalam artikel ini di Github.