سؤال

هل هناك طريقة لاستخدام FileOutputStream بطريقة إذا كان الملف (اسم ملف السلسلة) غير موجود، فسيتم إنشاؤه؟

FileOutputStream oFile = new FileOutputStream("score.txt", false);
هل كانت مفيدة؟

المحلول

سوف يلقي أ FileNotFoundException إذا كان الملف غير موجود ولا يمكن إنشاؤه (وثيقة)، لكنه سينشئه إذا استطاع.للتأكد، ربما يتعين عليك أولاً اختبار وجود الملف قبل إنشاء ملف FileOutputStream (وإنشاء مع createNewFile() إذا لم يحدث ذلك):

File yourFile = new File("score.txt");
yourFile.createNewFile(); // if file already exists will do nothing 
FileOutputStream oFile = new FileOutputStream(yourFile, false); 

نصائح أخرى

قبل إنشاء ملف، من الضروري إنشاء جميع الأدلة الأصلية.

يستخدم yourFile.getParentFile().mkdirs()

يمكنك إنشاء ملف فارغ سواء كان موجودا أم لا ... giveacodicetagpre.

إذا كنت ترغب في مغادرة الملف إذا كان موجودا ... giveacodicetagpre.

سوف تحصل فقط على filenotfoundException إذا حاولت إنشاء الملف في دليل غير موجود.

File f = new File("Test.txt");
if(!f.exists()){
  f.createNewFile();
}else{
  System.out.println("File already exists");
}

مرر هذا f لك FileOutputStream البناء.

fileUtils من Apache commons طريقة جيدة جدًا لتحقيق ذلك في سطر واحد.

FileOutputStream s = FileUtils.openOutputStream(new File("/home/nikhil/somedir/file.txt"))

سيؤدي هذا إلى إنشاء مجلدات أصلية في حالة عدم وجودها وإنشاء ملف في حالة عدم وجوده وطرح استثناء إذا كان كائن الملف عبارة عن دليل أو لا يمكن الكتابة إليه.هذا هو أي ما يعادل:

File file = new File("/home/nikhil/somedir/file.txt");
file.getParentFile().mkdirs(); // Will create parent directories if not exists
file.createNewFile();
FileOutputStream s = new FileOutputStream(file,false);

جميع العمليات المذكورة أعلاه ستطرح استثناءً إذا لم يُسمح للمستخدم الحالي بإجراء العملية.

إنشاء ملف إذا لم تكن موجودة.إذا كان الملف موجودا، فقم بمسح محتواها: giveacodicetagpre.

يمكنك الحصول على generaceticetagcode إذا كان الملف غير موجود.

وثائق جافا تقول:

سواء كان الملف متاحا أم لا، قد يتم إنشاؤه يعتمد على منصة الكامنة http://docs.oracle.com/javase/7/docs/api/java/io/fileoutputstream.html

إذا كنت تستخدم Java 7، فيمكنك استخدام حزمة Java.nio:

يحدد معلمة الخيارات كيف يتم إنشاء الملف أو فتحه ... يفتح الملف للكتابة، وإنشاء الملف إذا لم يكن موجودا ...

http://docs.oracle.com / javase / 7 / docs / api / java / nio / file / files.html

فقط إعطاء طريقة بديلة لإنشاء الملف فقط إذا لم يكن موجودا باستخدام المسار والملفات. giveacodicetagpre.

new FileOutputStream(f) سيقوم بإنشاء ملف في معظم الحالات، ولكن لسوء الحظ سوف تحصل على FileNotFoundException

إذا كان الملف موجودًا ولكنه دليل وليس ملفًا عاديًا، أو غير موجود ولكن لا يمكن إنشاؤه، أو لا يمكن فتحه لأي سبب آخر

من جافادوك

بمعنى آخر، قد يكون هناك الكثير من الحالات التي قد تحصل فيها على FileNotFoundException الذي يعني "تعذر إنشاء ملفك"، لكنك لن تتمكن من العثور على سبب فشل إنشاء الملف.

الحل هو إزالة أي استدعاء لـ File API واستخدام Files API بدلاً من ذلك لأنه يوفر معالجة أفضل للأخطاء.عادة استبدال أي new FileOutputStream(f) مع Files.newOutputStream(p).

في الحالات التي تحتاج فيها إلى استخدام File API (لأنك تستخدم واجهة خارجية تستخدم File على سبيل المثال)، فإن استخدام Files.createFile(p) هي طريقة جيدة للتأكد من إنشاء ملفك بشكل صحيح، وإذا لم يكن الأمر كذلك فستعرف سبب عدم نجاحه.علق بعض الأشخاص أعلاه بأن هذا زائد عن الحاجة.هذا صحيح، ولكنك تحصل على معالجة أفضل للأخطاء وهو ما قد يكون ضروريًا في بعض الحالات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top