على الرغم من أن Java توفر فئة تشغيل IO التي يمكنها معالجة الملفات ، إلا أنه لا توجد طريقة لنسخ الملفات. نسخ الملفات هي عملية مهمة. ومع ذلك ، هناك العديد من الطرق التي يمكن تكرارها بواسطة ملف Java ، والأساليب الأكثر شعبية في 4 مدرجة أدناه.
1. انسخ مع filestreams
هذه هي الطريقة الأكثر كلاسيكية لنسخ محتوى ملف واحد إلى ملف آخر. اقرأ بايت الملف A باستخدام FileInputStream ، واكتبه إلى File B مع FileOutputStream. هذا هو رمز الطريقة الأولى:
private void copyfileusingfilestreams (مصدر الملف ، القدر) [1024] ؛
كما ترى بعض البيانات من عمليات القراءة والكتابة ، يجب أن تكون هذه الكفاءة المنخفضة.
2. استخدم filechannel لنسخ
يتضمن Java NIO طريقة النقل من From ، والتي يجب أن تكون أسرع من نسخة تدفق الملف وفقًا للوثيقة. هذا هو رمز الطريقة الثانية:
private static void copyfileusingfilechannels (مصدر الملف ، مصير) يلقي iOexception ، 0 ، inputChannel.size () ؛
3. استخدم المشاعات IO لنسخ
توفر Apache Commons IO طريقة ملف نسخ في فئة FileUtils الخاصة بها ، والتي يمكن استخدامها لنسخ ملف إلى مكان آخر. من المريح للغاية بالنسبة لك استخدام مشروعك عند استخدام فئة Apache Commons FileUtils. في الأساس ، يستخدم هذا الفئة Java Nio Filechannel. هذا هو رمز الطريقة الثالثة:
private static void copyFileusingApacheCommonsio (مصدر الملف ، مصير الملف) يلقي ioException {fileutils.copyfile (المصدر ، القدر) ؛}4. انسخ مع فئة ملفات Java7
إذا كان لديك بعض الخبرة في Java 7 ، فقد تعرف أنه يمكنك استخدام طريقة نسخ ملفات الملفات لنسخها من ملف إلى ملف آخر. هذا هو رمز الطريقة الرابعة:
private static void copyfileusingjava7files (مصدر الملف ، مصير الملف) يلقي ioException {files.copy (source.topath () ، dest.topath ()) ؛}5. اختبار
الآن تعرف على إحدى هذه الطرق أكثر كفاءة ، سننسخ ملفًا كبيرًا لاستخدام كل برنامج بسيط. من ذاكرة التخزين المؤقت لتجنب أي أداء ، من الواضح أننا سنستخدم أربعة ملفات مصدر مختلفة وأربعة ملفات مستهدفة مختلفة. لنلقي نظرة على الكود:
استيراد java.io.file ؛ .nio.file.files ؛ /nikos7//desktop/files/sourcefile1.txt ") ؛ ملف dest = ملف جديد (" c: //users/nikos7//desktop/files/destfile1.txt ") ملف نسخ باستخدام filestreams start = system.nanotime ( ) = ملف جديد ("c: //users/nikos7//desktop/files//sourcefile2.txt") ؛ المصدر) ؛ //users//nikos7//desktop//sourcefile3 ؛ ؟ ؛ NULL ؛ اكتب (buf ، 0 ، bytesread) ؛}} أخيرًا {input.close () ؛ null ؛ {inputChannel.Close () ؛ ، مصير الملف) يلقي ioException {fileUtils.copyfile (المصدر ، القدر) ؛}}}الإخراج:
Time taken by Filestreams Copy = 127572360Time taken by FileChannels Copy = 10449963Time taken by Java7 Files Copy = 1080833333333333333333333333333333333333333333333333time By Apache Commons IO Copy = 17971677
مثلما يمكنك رؤية نسخ Filechannels ، فإن الملفات الكبيرة هي أفضل طريقة. إذا تعاملت مع الملفات الأكبر ، ستلاحظ فرقًا أكبر في السرعة. هذا مثال.
ما سبق هو كل محتويات هذه المقالة.