"Hai, Amigo. Lama tak jumpa."

"Hai, Bilaabo. Apa yang awak hendak bincangkan?"

"Hari ini saya akan memberitahu anda tentang bekerja dengan fail.  Java mempunyai kelas khas (Fail) yang boleh anda gunakan untuk mengurus fail pada cakera keras. Untuk menguruskan kandungan fail, terdapat kelas lain: FileInputStream, FileOutputStream, dsb. "

Fail, Fail, Laluan - 1

"Menarik. Tapi bila awak sebut 'uruskan fail', apa maksud awak?"

"Itu sahaja yang saya akan terangkan sekarang. Fail boleh dibuat, dipadam, dinamakan semula dan banyak lagi. Anda boleh menghantar objek Fail kepada hampir setiap kelas yang berfungsi dengan (membaca, menulis, menukar) kandungan fail . Sebagai contoh:"

Anda boleh menghantar nama fail terus ke FileInputStream
FileInputStream input = new FileInputStream("c:/path/a.txt");
Atau anda boleh mencipta objek Fail secara berasingan, dan kemudian menyerahkannya kepada FileInputStrea
File file = new File("c:/path/a.txt");
FileInputStream input = new FileInputStream(file);

"Tetapi pilihan kedua lebih panjang. Saya masih tidak faham mengapa kita memerlukan objek fail ini."

"Untuk contoh khusus ini, anda betul. "Ini bukan contoh bagaimana anda perlu melakukannya, tetapi bagaimana anda boleh melakukannya.
Tetapi bayangkan anda perlu memaparkan senarai semua fail yang terletak dalam direktori tertentu. Begini cara ini boleh dilakukan menggunakan objek Fail:"

Kod
File folder = new File("c:/path/");
for (File file : folder.listFiles())
{
 System.out.println(file.getName());
}

"Adakah listFiles() kaedah yang mengembalikan senarai fail dalam folder yang ditunjukkan oleh «c:/path/»?"

"Ya. Tetapi pengaturcara biasanya menyebut 'direktori'. Istilah 'folder' mula digunakan agak baru-baru ini, tetapi pada dasarnya, kedua-dua istilah adalah betul dan anda boleh menyatakan yang mana satu yang anda suka."

"OK. Dan apa yang getName () lakukan? Kembalikan nama fail? Apakah sebenarnya yang disertakan dalam nama itu? Nama penuh termasuk laluan, atau hanya nama fail itu sendiri?"

"Hanya nama fail itu sendiri. Untuk laluan penuh, terdapat file.getAbsolutePath()."

"Jadi apakah kaedah lain yang ada pada kelas Fail?"

"Lihat ini:"

Kaedah Penerangan
boolean isDirectory() Adakah objek Fail sebuah direktori?
boolean isFile() Adakah objek itu fail?
long length() Mengembalikan saiz/panjang fail dalam bait.
boolean createNewFile() Mencipta fail kosong baharu jika fail dengan nama ini belum wujud lagi.
boolean mkdir() Mencipta direktori. Nama «mkdir» berasal daripada «buat direktori».
boolean mkdirs() Mencipta direktori dan semua subdirektorinya.
boolean delete() Memadam fail yang dikaitkan dengan objek. Jika objek adalah direktori, maka direktori itu dipadamkan hanya jika tiada fail di dalamnya.
void deleteOnExit() Menambah fail ke senarai khas fail yang akan dipadamkan secara automatik apabila program keluar.
File createTempFile(
String prefix,
String suffix,
File directory)
Mencipta fail sementara dengan nama unik yang dijana secara rawak, seperti «dasd4d53sd».
Parameter tambahan ialah awalan nama dan akhiran. Jika direktori tidak ditentukan, maka fail itu dibuat dalam direktori OS khas untuk fail sementara.
boolean exists() Mengembalikan benar jika fail dengan nama yang sama wujud pada cakera keras.
String getAbsolutePath() Mengembalikan laluan penuh fail dengan semua subdirektorinya.
String getCanonicalPath() Mengembalikan laluan fail kanonik.
Sebagai contoh, menukar laluan «c:/dir/dir2/../a.txt» kepada «c:/dir/a.txt»
String[] list() Mengembalikan tatasusunan nama fail yang terkandung dalam direktori yang diwakili oleh objek semasa.
File[] listFiles() Mengembalikan tatasusunan fail yang terkandung dalam direktori yang diwakili oleh objek Fail semasa.
long getTotalSpace() Mengembalikan jumlah ruang (bilangan bait) pada cakera di mana fail itu terletak.
long getFreeSpace() Mengembalikan jumlah ruang kosong (bilangan bait) pada cakera di mana fail terletak.
boolean renameTo(File) Menamakan semula fail, iaitu kandungan fail sebenarnya mendapat nama baharu. Dengan kata lain, anda boleh menamakan semula fail «c:/dir/a.txt» kepada «d:/out/text/b.doc».
String getName() Mengembalikan hanya nama fail tanpa laluan.
String getParent() Mengembalikan hanya laluan (direktori) ke fail semasa, tanpa nama itu sendiri.
Path toPath() Mengembalikan objek Laluan yang sepadan dengan objek Fail semasa.

"Wah! Bukan senarai yang sangat kecil, ya? Dan nampaknya anda boleh melakukan banyak perkara dengannya: buat dan padam fail, namakan semula mereka,..."

"Jadi untuk mendapatkan direktori fail semasa, saya perlu memanggil getParent()?"

"Ya, tetapi ia mengembalikan String ― laluan fail ― bukan objek Fail. Sebenarnya, kelas Fail menduplikasi hampir semua kaedahnya: satu versi mengembalikan String, satu lagi - objek Fail. Semak ia:"

File file = new File("c:/path/a.txt");
String directory = file.getParent();
File file = new File("c:/path/a.txt");
File directory = file.getParentFile();

Jika anda mempunyai String dengan laluan fail dan anda memerlukan objek Fail , kemudian gunakan pembina. Jika keadaan diterbalikkan (anda mempunyai objek Fail tetapi anda memerlukan String), kemudian gunakan getAbsolutePath (). Sebagai contoh:"

String path = "c:/a.txt";
File file = new File(path);
File file = new File("c:/a.txt");
String path = file.getAbsolutePath();

"Faham."

"Bagus. Kemudian, inilah tugas kecil untuk anda: tunjukkan nama semua fail yang terletak dalam direktori yang sama dengan fail semasa."

"Tiada yang lebih mudah. ​​Di sini, lihat:"

Kod
//Some file
File originalFile = new File("c:/path/dir2/a.txt");

//An object representing the directory
File folder = originalFile.getParentFile();

//Print the file list on screen
for (File file : folder.listFiles())
{
 System.out.println(file.getName());
}

"Hmm. Betul."

"Tetapi agak mengelirukan bahawa kelas yang sama ― Fail ― digunakan untuk kedua-dua fail dan direktori. Itu nampaknya tidak begitu logik bagi saya."

"Ia berjaya seperti itu atas sebab sejarah. Direktori dahulunya adalah fail 'kosong' khas pada cakera. Sudah tentu, kini banyak yang telah berubah, tetapi bukan segala-galanya. Itu sahaja yang saya ada hari ini."

"Terima kasih untuk pelajaran yang menarik, Bilaabo."