Di Java, ada cara sederhana untuk mengilustrasikan yang berikut:
public static void moveFolder (String Oldpath, String NewPath) {// Salin file copyFolder (oldpath, newPath); // hapus file sumber untuk menghindari membingungkan deletedir (file baru (oldpath)); } File tidak boleh dipotong langsung untuk mencegah kesalahan selama pemotongan, menghasilkan masalah dari satu jenis atau lainnya.
Menyalin folder dan semua subfil dan subfolder di Java telah dijelaskan secara rinci dalam artikel "[Java] menggunakan input file dan aliran output untuk menyelesaikan operasi menyalin semua file dalam satu folder dan folder lain" (klik untuk membuka tautan).
Kuncinya adalah menghapus folder, subfil dan subfolder mereka.
Di Java, metode delete () dari kelas file hanya dapat menghapus folder kosong atau file tunggal. Oleh karena itu, perlu untuk melintasi seluruh folder, mulai dengan file di folder terdalam, dan melakukan penghapusan rekursif. Metode spesifiknya adalah sebagai berikut:
// Hapus semua subdirektori dan file dalam direktori dan direktori public static boolean deletedir (file dir) {// jika itu adalah folder if (dir.isdirectory ()) {// baca semua file dalam folder string [] anak -anak = dir.list (); // Hapus subdirektori secara rekursif dalam direktori untuk (int i = 0; i <children.length; i ++) {// File f = File baru (string induk, string anak) // nama jalur abstrak orang tua digunakan untuk mewakili direktori, dan string nama jalur anak digunakan untuk mewakili direktori atau file. // Jalur file persis sama dengan jalur file. boolean isDelete = deletedir (file baru (dir, anak -anak [i])); // Jika Anda menghapusnya dan tidak ada yang menghapusnya, dan isDelete == false, maka rekursi akan muncul jika (! IsDelete) {return false; }}} // Apa yang Anda baca adalah file atau direktori kosong, Anda dapat secara langsung menghapus return dir.delete (); } Oleh karena itu, ini adalah bagaimana seluruh metode terhubung, pindahkan folder A dan semua subfil dan subfolder di bawah disk C ke disk f, dan ganti nama:
impor java.io.*; Kelas publik Cuttest {// Hapus semua subdirektori dan file dalam direktori dan direktori public static boolean deletedir (file dir) {// jika itu adalah folder jika (dir.isdirectory ()) {// baca semua file dalam folder string [] anak -anak = dir.list (); // Hapus subdirektori secara rekursif dalam direktori untuk (int i = 0; i <children.length; i ++) {// File f = File baru (string induk, string anak) // nama jalur abstrak orang tua digunakan untuk mewakili direktori, dan string nama jalur anak digunakan untuk mewakili direktori atau file. // terhubung bersama adalah jalur file boolean isDelete = deletedir (file baru (dir, anak -anak [i])); // Jika Anda menghapusnya dan tidak ada yang menghapusnya, dan isDelete == false, maka secara rekursif melompat keluar dari waktu ini jika (! IsDelete) {return false; }}} // Jika Anda membaca file atau direktori kosong, Anda dapat secara langsung menghapus return dir.delete (); } // Salin semua subdirektori dan file dalam direktori dan direktori tertentu ke folder baru public static void copyFolder (String Oldpath, String NewPath) {coba {// Jika folder tidak ada, buat file folder baru (baru) (newPath)). Mkdirs (); // Baca konten seluruh folder ke array string file, atur kursor saya di bawah ini, dan pindahkan 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 OldPath/file baik -baik saja // jika tidak, tambahkan pemisah path setelah OldPath dan tambahkan 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); // Salin dan ganti nama 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"); }} public static void moveFolder (String Oldpath, String NewPath) {// Salin file first copyFolder (oldpath, newPath); // hapus file sumber untuk menghindari membingungkan deletedir (file baru (oldpath)); } public static void main (string [] args) {moveFolder ("c:/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.