سؤال

أريد كتابة محتويات الملف.

ما فكرت به حتى الآن هو:

  1. حفظ الملف باسم
  2. حذف الملفات الموجودة
  3. إنشاء ملف فارغ بنفس الاسم
  4. كتابة المحتوى المطلوب إلى الملف فارغ

هذا هو أفضل طريقة ؟ أم أن هناك وسيلة أكثر مباشرة وليس بعد حذف وإعادة إنشاء الملفات ، ولكن ببساطة تغيير المحتوى ؟

هل كانت مفيدة؟

المحلول

الكتابة فوق الملف فو.سجل مع FileOutputStream:

File myFoo = new File("foo.log");
FileOutputStream fooStream = new FileOutputStream(myFoo, false); // true to append
                                                                 // false to overwrite.
byte[] myBytes = "New Contents\n".getBytes(); 
fooStream.write(myBytes);
fooStream.close();

أو مع FileWriter :

File myFoo = new File("foo.log");
FileWriter fooWriter = new FileWriter(myFoo, false); // true to append
                                                     // false to overwrite.
fooWriter.write("New Contents\n");
fooWriter.close();

نصائح أخرى

أود أن أوصي باستخدام أباتشي شيوعا هو FileUtil هذا.لقد وجدت هذه الحزمة لا تقدر بثمن.انها سهلة الاستخدام و بنفس القدر من الأهمية أنه من السهل قراءة/فهم عندما كنت أعود في وقت لاحق في حين.

//Create some files here
File sourceFile = new File("pathToYourFile");
File fileToCopy = new File("copyPath");

//Sample content
org.apache.commons.io.FileUtils.writeStringToFile(sourceFile, "Sample content");

//Now copy from source to copy, the delete source.
org.apache.commons.io.FileUtils.copyFile(sourceFile, fileToCopy);
org.apache.commons.io.FileUtils.deleteQuietly(sourceFile);

المزيد من المعلومات يمكن الاطلاع على:http://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html

انظر: java.io.وrandomaccessfile

سوف تحتاج إلى فتح ملف للقراءة والكتابة, لذلك:

RandomAccessFile raf = new RandomAccessFile("filename.txt", "rw");
String tmp;
while (tmp = raf.readLine() != null) {
    // Store String data
}
// do some string conversion
raf.seek(0);
raf.writeChars("newString");

إلا إذا كنت فقط إضافة المحتوى في النهاية ، فمن المعقول أن تفعل ذلك بهذه الطريقة.إذا كنت إلحاق حاول FileWriter مع إلحاق منشئ.

أفضل قليلا من أجل أن يكون:

  1. توليد جديدة اسم الملف (على سبيل المثالفو.txt.جديد)
  2. كتابة تحديث المحتوى إلى ملف جديد.
  3. هل الذرية تسمية من فو.txt.جديد foo.txt

للأسف renameTo هو ليست مضمونة للقيام الذرية إعادة تسمية.

في المثال التالي, "كاذبة" أسباب الملف أن تكون الكتابة, صحيح قد يسبب العكس.

File file=new File("C:\Path\to\file.txt");
DataOutputStream outstream= new DataOutputStream(new FileOutputStream(file,false));
String body = "new content";
outstream.write(body.getBytes());
outstream.close(); 

هناك أوقات عندما قد ترغب في الاحتفاظ ضخمة الملف فارغ وذلك لتجنب تكلفة إضافية من نظام التشغيل تخصيص مساحة على أساس الاحتياجات.هذا يحدث عادة عن طريق قواعد البيانات, الأجهزة الظاهرية أيضا في دفعة برامج عملية كتابة البيانات بكميات كبيرة.وهذا من شأنه تحسين أداء التطبيق بشكل كبير.في هذه الحالات, كتابة ملف جديد و تسميته لن تساعد حقا.بدلا من, الملف فارغ سوف تضطر إلى أن يملأ.هذا هو عندما يجب على المرء أن يذهب من أجل تجاوز الوضعية.

الجوافة الملف.الكتابة "الكتابة فوق ملف مع محتويات صفيف بايت":

Files.write(bytes, new File(path));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top