1. วัตถุประสงค์พื้นฐาน
ใช้ Java เพื่อดำเนินการต่อไปนี้:
คัดลอกไฟล์ทั้งหมดในโฟลเดอร์หนึ่งไปยังโฟลเดอร์อื่นเช่นมีสองโฟลเดอร์ A และ B ในดิสก์ F:
มีไฟล์จำนวนมากใน f:/a หลังจากเรียกใช้โปรแกรม Java พวกเขาทั้งหมดจะถูกคัดลอกไปยัง F:/B และเปลี่ยนชื่อ เพิ่มคำนำหน้าของ RENAME_ ก่อนไฟล์ทั้งหมด หากมีโฟลเดอร์อยู่ข้างในโฟลเดอร์จะไม่ถูกเปลี่ยนชื่อ ไฟล์ภายในจะถูกเปลี่ยนชื่อและคำนำหน้าของ RENAME_ ก่อนไฟล์ทั้งหมด:
2. กระบวนการผลิต
1. ก่อนอื่นฟังก์ชั่นหลักนั้นง่ายมากซึ่งคือการเรียกฟังก์ชั่น CopyFolder ในคลาส FileTest ด้านบน
ระดับสาธารณะ FileCopy {โมฆะคงที่สาธารณะหลัก (String args []) {New FileTest (). CopyFolder ("f:/a", "f:/b"); -เป็นที่น่าสังเกตว่าใน Java, F:/A ไม่มีปัญหาและ f:/a ก็ไม่มีปัญหา แต่เนื่องจาก/ต้องถ่ายโอนเมื่อแสดงสตริงคุณต้องเขียนเป็น f: // a
2. กุญแจสู่โปรแกรมทั้งหมดคือฟังก์ชั่น CopyFolder ในคลาส FileTest ฟังก์ชั่นนี้คือ -_- ในคลาสนี้! นอกจากนี้โปรดทราบว่า java.io.* มีการแนะนำที่จุดเริ่มต้นของโปรแกรม เนื่องจากใช้สตรีมอินพุตและเอาต์พุต
คลาส FileTest {Public Void CopyFolder (String OldPath, String newPath) {ลอง {// ถ้าโฟลเดอร์ไม่มีอยู่ให้สร้างโฟลเดอร์ใหม่ (ไฟล์ใหม่ (newPath)). mkdirs (); // อ่านเนื้อหาของโฟลเดอร์ทั้งหมดไปยังอาร์เรย์สตริงไฟล์ตั้งค่าเคอร์เซอร์ I ด้านล่างและเลื่อนลงเพื่อเริ่มอ่านไฟล์อาร์เรย์ไฟล์ fileList = ไฟล์ใหม่ (oldPath); String [] file = fileList.list (); // โปรดทราบว่าอุณหภูมินี้เป็นเพียงตัวชี้ไฟล์ชั่วคราว // โปรแกรมทั้งหมดไม่ได้สร้างไฟล์ไฟล์ชั่วคราว temp = null; สำหรับ (int i = 0; i <file.length; i ++) {// ถ้า oldpath ลงท้ายด้วยตัวคั่นพา ธ/หรือ//ชื่อไฟล์ path/ไฟล์นั้นดี // มิฉะนั้นคุณต้องเพิ่มตัวคั่นพา ธ หลังจาก OldPath และเพิ่มชื่อไฟล์ // ใครจะรู้ว่าพารามิเตอร์ที่คุณผ่านเป็น f:/a หรือ f:/a/a/? if (oldpath.endswith (file.separator)) {temp = ไฟล์ใหม่ (oldpath + ไฟล์ [i]); } else {temp = ไฟล์ใหม่ (oldpath + file.Saperator + ไฟล์ [i]); } // ถ้าเคอร์เซอร์พบไฟล์ถ้า (temp.isfile ()) {fileInputStream input = new FileInputStream (TEMP); fileOutputStream output = ใหม่ fileOutputStream (newPath + "/" + "rename_" + (temp.getName ()). toString ()); ไบต์ [] bufferArray = byte ใหม่ [1024 * 64]; int prereadlength; ในขณะที่ ((prereadLength = input.read (bufferArray))! = -1) {output.write (bufferArray, 0, preereadlength); } output.flush (); output.close (); input.close (); } // ถ้าเคอร์เซอร์พบโฟลเดอร์ถ้า (temp.isdirectory ()) {copyFolder (oldpath + "/" + ไฟล์ [i], newpath + "/" + ไฟล์ [i]); }}} catch (exception e) {system.out.println ("ข้อผิดพลาดในการคัดลอกเนื้อหาทั้งหมดโฟลเดอร์"); -อาจเป็นเรื่องยากที่จะเข้าใจเมื่อเคอร์เซอร์พบไฟล์ ในความเป็นจริงมันเป็นเช่นนี้ ขั้นแรกให้ตั้งค่าสตรีมอินพุตไฟล์ระบุอินพุตจากไฟล์ที่พบโดยเคอร์เซอร์จากนั้นระบุเอาต์พุตไปยังไดเรกทอรีไฟล์ของชื่อไฟล์ newpath/rename_old หลังจากนั้นตั้งค่าอาร์เรย์บัฟเฟอร์ สำหรับสตรีมอินพุตไฟล์สำหรับไฟล์ที่คุณต้องการอ่านทุกครั้งที่คุณเรียกวิธีการอ่านมันจะอ่านเนื้อหาของความยาวอาร์เรย์บัฟเฟอร์ของบัฟเฟอร์บัฟเฟอร์บัฟเฟอร์ไปยังตำแหน่งที่คุณอ่านจัดเก็บเนื้อหาการอ่านไปยังอาร์เรย์บัฟเฟอร์
สำหรับสาเหตุที่สตรีมอินพุตไฟล์สามารถเป็นไปได้ด้วยวิธีนี้มันจะยังคงอ่านย้อนหลังไปยังตำแหน่งที่การอ่านล่าสุดคือเพราะเมื่อไฟล์จะต้องอ่าน Java encapsulated fileInputStream.read วิธีการอ่านจะเรียกระบบปฏิบัติการ API เพื่ออ่านข้อมูลเหล่านี้ เมื่ออ่านข้อมูลไฟล์จะต้องอยู่ในลำดับ มันเป็นไปไม่ได้ที่จะอ่านไบต์แรกก่อนแล้วจึงเป็นไบต์ที่สองถึงสุดท้าย เมื่ออ่านลูปวิธีการอ่านจะอ่านตำแหน่ง ++ เพื่อให้การอ่านแต่ละครั้งอ่านไบต์ต่อไปนี้ตามลำดับจนกว่าจะสิ้นสุดไฟล์
เมื่อเคอร์เซอร์พบโฟลเดอร์เพียงเรียกมันอีกครั้งเพื่อดำเนินการให้เสร็จสิ้นการดำเนินการเดียวกัน สิ่งนี้เรียกว่าการวนซ้ำ
3. ดังนั้นขั้นตอนทั้งหมดมีดังนี้:
นำเข้า Java.io.*; / **** @param oldpath ไดเรกทอรีที่จะคัดลอก* @param newpath ไดเร็กทอรีที่จะคัดลอก**/ คลาส filetest {โมฆะสาธารณะ copyfolder (สตริง oldpath, สตริง newpath) {ลอง {// ถ้าโฟลเดอร์ไม่มีอยู่ให้สร้างโฟลเดอร์ใหม่ (ไฟล์ใหม่ // อ่านเนื้อหาของโฟลเดอร์ทั้งหมดไปที่อาร์เรย์สตริงไฟล์ตั้งค่าเคอร์เซอร์ I ด้านล่างและเลื่อนลงอย่างต่อเนื่องเพื่อเริ่มอ่านไฟล์อาร์เรย์นี้ไฟล์ fileList = ไฟล์ใหม่ (OldPath); String [] file = fileList.list (); // โปรดทราบว่าอุณหภูมินี้เป็นเพียงตัวชี้ไฟล์ชั่วคราว // โปรแกรมทั้งหมดไม่ได้สร้างไฟล์ไฟล์ชั่วคราว temp = null; สำหรับ (int i = 0; i <file.length; i ++) {// ถ้า oldpath ลงท้ายด้วยตัวคั่นพา ธ/หรือ//ชื่อไฟล์ path/ไฟล์นั้นดี // มิฉะนั้นคุณต้องเพิ่มตัวคั่นพา ธ หลังจาก OldPath และเพิ่มชื่อไฟล์ // ใครจะรู้ว่าพารามิเตอร์ที่คุณผ่านเป็น f:/a หรือ f:/a/a/? if (oldpath.endswith (file.separator)) {temp = ไฟล์ใหม่ (oldpath + ไฟล์ [i]); } else {temp = ไฟล์ใหม่ (oldpath + file.Saperator + ไฟล์ [i]); } // ถ้าเคอร์เซอร์พบไฟล์ถ้า (temp.isfile ()) {fileInputStream input = new FileInputStream (TEMP); fileOutputStream output = ใหม่ fileOutputStream (newPath + "/" + "rename_" + (temp.getName ()). toString ()); ไบต์ [] bufferArray = byte ใหม่ [1024 * 64]; int prereadlength; ในขณะที่ ((prereadLength = input.read (bufferArray))! = -1) {output.write (bufferArray, 0, preereadlength); } output.flush (); output.close (); input.close (); } // ถ้าเคอร์เซอร์พบโฟลเดอร์ถ้า (temp.isdirectory ()) {copyFolder (oldpath + "/" + ไฟล์ [i], newpath + "/" + ไฟล์ [i]); }}} catch (exception e) {system.out.println ("ข้อผิดพลาดในการคัดลอกเนื้อหาทั้งหมดโฟลเดอร์"); }}} คลาสสาธารณะ fileCopy {โมฆะคงที่สาธารณะหลัก (สตริง args []) {new fileTest (). CopyFolder ("f:/a", "f:/b"); -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น