1. الأهداف الأساسية
استخدم Java لإكمال العمليات التالية:
انسخ جميع الملفات في مجلد واحد إلى مجلد آخر ، على سبيل المثال ، هناك مجلدان A و B في القرص F:
هناك مجموعة من الملفات في f:/a. بعد تشغيل برنامج Java ، سيتم نسخها جميعًا إلى F:/B وإعادة تسميتها. أضف بادئة RENAME_ قبل جميع الملفات. إذا كان هناك مجلد في الداخل ، فلن تتم إعادة تسمية المجلد. سيتم إعادة تسمية الملفات الموجودة في الداخل ، وبادئة RENAME_ قبل جميع الملفات:
2. عملية الإنتاج
1. أولاً وقبل كل شيء ، الوظيفة الرئيسية بسيطة للغاية ، وهي استدعاء وظيفة النسخ في فئة Filetest أعلاه.
فئة عامة fileCopy {public static void main (string args []) {new fileTest (). colitfolder ("f:/a" ، "f:/b") ؛ }}تجدر الإشارة إلى أنه في Java ، لا يملك F:/A مشكلة ، و F:/A ليس مشكلة أيضًا ، ولكن نظرًا لأن/يجب نقلها عند التعبير عن سلسلة ، يجب عليك كتابتها على أنها F: //
2. مفتاح البرنامج بأكمله هو وظيفة COLOTIDER في فئة FILETEST. هذه الوظيفة هي -_- في هذه الفئة! أيضًا ، يرجى ملاحظة أن Java.io.* تم تقديمه في بداية البرنامج ؛ منذ استخدام دفق الإدخال والإخراج
class fileTest {public void copyfolder (String OldPath ، String NewPath) {try {// إذا لم يكن المجلد موجودًا ، قم بإنشاء مجلد جديد (ملف جديد (newPath)). mkdirs () ؛ // اقرأ محتويات المجلد بأكمله إلى صفيف سلسلة الملفات ، وضبط المؤشر I أدناه ، وانتقل لأسفل لبدء قراءة ملف ملف Array = ملف جديد (OldPath) ؛ string [] file = fileList.List () ؛ // لاحظ أن هذه درجة الحرارة هي مجرد مؤشر ملف مؤقت // لا يقوم البرنامج بأكمله بإنشاء TEMP = NULL ؛ من أجل (int i = 0 ؛ i <file.length ؛ i ++) {// إذا انتهى OldPath بفاصل مسار/أو/، فإن اسم الملف OldPath/ملف جيد // وإلا ، عليك إضافة فاصل مسار بعد OldPath وإضافة اسم ملف // من يعرف ما إذا كانت المعلمات التي تم تمريرها هي f:/a أو f:/a/؟ if (oldpath.endswith (file.separator)) {temp = file new (oldpath + file [i]) ؛ } else {temp = new file (OldPath + File.separator + file [i]) ؛ } // إذا كان المؤشر يواجه ملفًا if (temp.isfile ()) {fileInputStream input = new FileInputStream (temp) ؛ FileOutputStream Output = new FileOutputStream (NewPath + "/" + "RENAME_" + (temp.getName ()). toString ()) ؛ Byte [] BufferArray = New Byte [1024 * 64] ؛ int preeadlength ؛ بينما ((preeReadLength = input.Read (bufferArray))! = -1) {output.write (bufferArray ، 0 ، preadLength) ؛ } output.flush () ؛ output.close () ؛ input.close () ؛ } // إذا كان المؤشر يواجه مجلد إذا (temp.isDirectory ()) {copyPholder (OldPath + "/" + file [i] ، newPath + "/" + file [i]) ؛ }}} catch (استثناء e) {system.out.println ("خطأ في نسخ محتوى المجلد بأكمله") ؛ }}}قد يكون من الصعب بعض الشيء فهم عندما يواجه المؤشر ملفًا. في الواقع ، هو مثل هذا. أولاً ، قم بتعيين دفق إدخال الملف ، وحدد الإدخال من الملف الذي واجهته المؤشر ، ثم حدد الإخراج إلى دليل ملف NewPath/Rename_old. بعد ذلك ، قم بتعيين صفيف عازلة. بالنسبة لدفق إدخال الملف ، بالنسبة للملف الذي تريد قراءته ، في كل مرة تتصل بها طريقة القراءة ، ستستمر في قراءة محتوى مصفوفة المخزن المؤقت لمحول صفيف المخزن المؤقت إلى الموضع الذي تقرأه ، وتخزين محتوى القراءة إلى مجموعة العازلة ، والكتابة فوق المحتويات التي تتوافق مع المُحتويات التي يتم إخراجها -ثم يخرج دفق إخراج الملفات جميع محتويات صفيف الصفيف المحدد حتى الموقع المحدد.
أما بالنسبة للسبب في أن دفق إدخال الملف يمكن أن يكون بالترتيب بهذه الطريقة ، فسوف يستمر في القراءة للخلف إلى الموقع الذي تكون فيه القراءة الأخيرة ، لأنه عندما يتم قراءة الملف ، فإن طريقة ملفات Java closed FileInputStream.CREAD ستدعو أيضًا واجهة برمجة تطبيقات نظام التشغيل لقراءة هذه البيانات بدورها. عند قراءة بيانات الملف ، يجب أن تكون متتابعة. من المستحيل قراءة البايت الأول أولاً ثم الثاني إلى الأخير. عند قراءة الحلقة ، ستقرأ طريقة القراءة الموضع ++ ، بحيث تقرأ كل قراءة البايتات التالية بالتتابع حتى يتم مواجهة نهاية الملف.
عندما يواجه المؤشر مجلد ، ما عليك سوى الاتصال به مرة أخرى لإكمال نفس العملية. وهذا ما يسمى التكرار.
3. لذلك ، فإن الإجراء كله هو كما يلي:
استيراد java.io.*؛ / **** param oldpath الدليل المراد نسخه* param newPath يتم نسخ الدليل**/ class fileTest {public void copleder (String OldPath ، String newPath) {try {// إذا لم يكن المجلد موجودًا ، قم بإنشاء مجلد جديد (ملف جديد (NewPath)). mkdirs () ؛ // اقرأ محتويات المجلد بأكمله إلى صفيف سلسلة الملفات ، وقم بتعيين مؤشر I أدناه ، وانقله باستمرار لبدء قراءة ملف ملف Array هذا = ملف جديد (OldPath) ؛ string [] file = fileList.List () ؛ // لاحظ أن هذه درجة الحرارة هي مجرد مؤشر ملف مؤقت // لا يقوم البرنامج بأكمله بإنشاء TEMP = NULL ؛ من أجل (int i = 0 ؛ i <file.length ؛ i ++) {// إذا انتهى OldPath بفاصل مسار/أو/، فإن اسم الملف OldPath/ملف جيد // وإلا ، عليك إضافة فاصل مسار بعد OldPath وإضافة اسم ملف // من يعرف ما إذا كانت المعلمات التي تم تمريرها هي f:/a أو f:/a/؟ if (oldpath.endswith (file.separator)) {temp = file new (oldpath + file [i]) ؛ } else {temp = new file (OldPath + File.separator + file [i]) ؛ } // إذا كان المؤشر يواجه ملفًا if (temp.isfile ()) {fileInputStream input = new FileInputStream (temp) ؛ FileOutputStream Output = new FileOutputStream (NewPath + "/" + "RENAME_" + (temp.getName ()). toString ()) ؛ Byte [] BufferArray = New Byte [1024 * 64] ؛ int preeadlength ؛ بينما ((preeReadLength = input.Read (bufferArray))! = -1) {output.write (bufferArray ، 0 ، preadLength) ؛ } output.flush () ؛ output.close () ؛ input.close () ؛ } // إذا كان المؤشر يواجه مجلد إذا (temp.isDirectory ()) {copyPholder (OldPath + "/" + file [i] ، newPath + "/" + file [i]) ؛ }}} catch (استثناء e) {system.out.println ("خطأ في نسخ محتوى المجلد بأكمله") ؛ }}} الفئة العامة fileCopy {public static void main (string args []) {new fileTest (). colorfolder ("f:/a" ، "f:/b") ؛ }}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.