1. Tujuan Dasar
Gunakan Java untuk menyelesaikan operasi berikut:
Salin semua file dalam satu folder ke folder lain, misalnya, ada dua folder A dan B di disk f:
Ada banyak file di f:/a. Setelah menjalankan program Java, semuanya akan disalin ke F:/B dan berganti nama menjadi. Tambahkan awalan Rename_ sebelum semua file. Jika ada folder di dalamnya, folder tidak akan diganti namanya. File di dalamnya akan diganti namanya, dan awalan Rename_ sebelum semua file:
2. Proses Produksi
1. Pertama -tama, fungsi utama sangat sederhana, yaitu memanggil fungsi copyFolder di kelas FileTest di atas.
kelas publik filecopy {public static void main (string args []) {new filetest (). copyFolder ("f:/a", "f:/b"); }}Perlu dicatat bahwa di Java, f:/a tidak memiliki masalah, dan f:/a juga tidak masalah, tetapi karena/harus ditransfer saat mengekspresikan string, Anda harus menulisnya sebagai f: // a
2. Kunci untuk seluruh program adalah fungsi copyFolder di kelas FileTest. Fungsi ini -_- Di kelas ini! Juga, harap dicatat bahwa java.io.* diperkenalkan di awal program; karena aliran input dan output digunakan
class filetest {public void copyFolder (String oldPath, String newPath) {coba {// Jika folder tidak ada, buat folder baru (file baru (newPath)). mkdirs (); // Baca konten seluruh folder ke array string file, atur kursor saya di bawah ini, dan bergerak ke bawah untuk mulai membaca file array fileList = file baru (oldpath); String [] file = fileList.list (); // Perhatikan bahwa suhu ini hanyalah pointer file sementara // seluruh program tidak membuat file sementara file temp = null; untuk (int i = 0; i <file.length; i ++) {// Jika oldpath berakhir dengan pemisah path/atau/, maka nama tua/nama file baik -baik saja // jika tidak, Anda harus menambahkan pemisah path setelah oldpath dan menambahkan nama file // siapa yang tahu apakah parameter yang Anda lewati adalah f:/a atau f:/a/? if (oldpath.endswith (file.separator)) {temp = file baru (oldpath + file [i]); } else {temp = file baru (oldpath + file.separator + file [i]); } // Jika kursor menemukan file if (temp.isfile ()) {fileInputStream input = new FileInputStream (temp); FileOutputStream output = new FileOutputStream (newPath + "/" + "Rename_" + (temp.getName ()). ToString ()); byte [] bufferarray = byte baru [1024 * 64]; int prereadlength; while ((prereadlength = input.read (bufferarray))! = -1) {output.write (bufferarray, 0, prereadlength); } output.flush (); output.close (); input.close (); } // Jika kursor bertemu dengan folder if (temp.isdirectory ()) {copyFolder (oldpath + "/" + file [i], newpath + "/" + file [i]); }}} catch (Exception e) {System.out.println ("Kesalahan dalam menyalin seluruh konten folder"); }}}Mungkin agak sulit untuk dipahami ketika kursor menemukan file. Bahkan, seperti ini. Pertama, atur aliran input file, tentukan input dari file yang ditemui oleh kursor, dan kemudian tentukan output ke direktori file nama file newpath/rename_old. Setelah itu, atur array buffer. Untuk aliran input file, untuk file yang ingin Anda baca, setiap kali Anda memanggil metode baca, itu akan terus membaca konten panjang array buffer dari buffer buffer bufferarray ke posisi yang Anda baca, simpan konten yang dibaca ke array buffer, menimpa semua konten sebelum array buffer di array, dan kemudian aliran output file akan menghasilkan semua isi.
Adapun mengapa aliran input file dapat berurutan dengan cara ini, itu akan terus membaca mundur ke lokasi di mana bacaan terakhir berada, karena ketika file akan dibaca, metode java yang dienkapsulasi fileInputStream.read Metode juga akan memanggil API sistem operasi untuk membaca data ini secara bergantian. Saat membaca data file, itu harus berurutan. Tidak mungkin membaca byte pertama terlebih dahulu dan kemudian byte kedua ke terakhir. Saat membaca loop, metode baca akan membaca posisi ++, sehingga setiap baca membaca byte berikut secara berurutan sampai akhir file ditemui.
Ketika kursor menemukan folder, sebut saja lagi untuk menyelesaikan operasi yang sama. Ini disebut iterasi.
3. Oleh karena itu, seluruh prosedur adalah sebagai berikut:
impor java.io.*; / **** @param oldpath direktori yang akan disalin* @param newpath direktori yang akan disalin**/ class filetest {public void copyFolder (String oldpath, string newPath) {coba {// jika folder tidak ada, buat folder baru (file baru (newpath)). mkdirs (); // Baca konten seluruh folder ke array string file, atur kursor saya di bawah ini, dan pindahkan terus -menerus untuk mulai membaca file array file ini = file baru (oldpath); String [] file = fileList.list (); // Perhatikan bahwa suhu ini hanyalah pointer file sementara // seluruh program tidak membuat file sementara file temp = null; untuk (int i = 0; i <file.length; i ++) {// Jika oldpath berakhir dengan pemisah path/atau/, maka nama tua/nama file baik -baik saja // jika tidak, Anda harus menambahkan pemisah path setelah oldpath dan menambahkan nama file // siapa yang tahu apakah parameter yang Anda lewati adalah f:/a atau f:/a/? if (oldpath.endswith (file.separator)) {temp = file baru (oldpath + file [i]); } else {temp = file baru (oldpath + file.separator + file [i]); } // Jika kursor menemukan file if (temp.isfile ()) {fileInputStream input = new FileInputStream (temp); FileOutputStream output = new FileOutputStream (newPath + "/" + "Rename_" + (temp.getName ()). ToString ()); byte [] bufferarray = byte baru [1024 * 64]; int prereadlength; while ((prereadlength = input.read (bufferarray))! = -1) {output.write (bufferarray, 0, prereadlength); } output.flush (); output.close (); input.close (); } // Jika kursor bertemu dengan folder if (temp.isdirectory ()) {copyFolder (oldpath + "/" + file [i], newpath + "/" + file [i]); }}} catch (Exception e) {System.out.println ("Kesalahan dalam menyalin seluruh konten folder"); }}} kelas publik FileCopy {public static void main (string args []) {new filetest (). copyFolder ("f:/a", "f:/b"); }}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.