تمت إضافة فئة Java Files في Java 1.7 وهي جزء من حزمة java.nio.file
.
فئة ملفات جافا
- تحتوي فئة ملفات جافا على طرق ثابتة تعمل على الملفات والدلائل.
- يتم استخدام هذه الفئة لعمليات الملفات الأساسية مثل إنشاء، قراءة، كتابة، نسخ وحذف الملفات أو الدلائل في نظام الملفات.
قبل أن نتقدم دعنا نلقي نظرة على المصطلحات أدناه أولاً:
Path
: هذه هي الواجهة التي تحل محل فئةjava.io.File
كتمثيل لملف أو دليل عند العمل في Java NIO.- Paths: تحتوي هذه الفئة على طريقة ثابتة لإنشاء مثيل
Path
.
java.nio.file.Path
واجهة تشبه الفئة القديمة java.io.File
. Path
تمثل موقع الملف وعند إنشاء Path لملف جديد، لا يتم إنشاء الملف الفعلي حتى نقوم بإنشائه باستخدام Files.createFile(Path filePath)
. كما يمكننا رؤية في الرسم البياني أعلاه، تستخدم فئة Paths لإنشاء مثيل Path وتستخدم فئة Files مثيل Path للعمل على ملف. File و
Path
الكائنات يعرفان كيفية التحويل إلى الآخر، هذا كيفية يمكننا استخدام الكود القديم للتفاعل مع الأداة الجديدة Files.
Java IO مقابل NIO
كيفية إنشاء Path
يمكننا إنشاء كائن من Path
عن طريق استدعاء طريقة Paths.get(String first, String... more)
من فئة Paths
.
Path path1 = Paths.get("/tmp/file.txt"); // For UNIX
Path path2 = Paths.get("D:/data/file.txt"); // For Windows
يمكننا أيضًا إنشاء كائن من Path
عن طريق فصل أجزاء المسار في طريقة Paths.get()
.
Path path1 = Paths.get("/tmp", "file.txt");
Path path2 = Paths.get("D:", "data", "file.txt");
Path path3 = Paths.get("D:/data", "file.txt") ;
كما يمكننا رؤية، يمكننا تمرير اسم المجلد واسم الملف في طريقة Paths.get()
بشكل منفصل.
أساليب ملفات جافا
يحتوي فئة Java NIO Files على أساليب ثابتة تُستخدم لتلاعب الملفات والمجلدات، وتعمل هذه الأساليب بشكل أساسي على كائن Path
. دعنا نلقي نظرة على الأساليب التالية في فئة Files:
- copy(InputStream in، Path target، CopyOption… options): تقوم هذه الطريقة بنسخ جميع البايتات من تيار الإدخال المحدد إلى ملف الهدف المحدد وتُرجع عدد البايتات التي تم قراءتها أو كتابتها كقيمة طويلة.
- copy(Path source، OutputStream out): تقوم هذه الطريقة بنسخ جميع البايتات من الملف المصدر المحدد إلى التيار الخرج المعطى وتُرجع عدد البايتات التي تم قراءتها أو كتابتها كقيمة طويلة.
- copy(Path source، Path target، CopyOption… options): تقوم هذه الطريقة بنسخ الملف المصدر المعطى إلى الملف الهدف المحدد وتُرجع مسار الملف الهدف.
- createDirectories(Path dir، FileAttribute<?>… attrs): تقوم هذه الطريقة بإنشاء مجلدات باستخدام المسار المعطى عن طريق إنشاء جميع المجلدات الأصلية غير الموجودة أولاً. لن تُلقي هذه الطريقة استثناء إذا لم يتمكن من إنشاء المجلد لأنه موجود بالفعل. FileAttribute هو معلمة اختيارية لتعيينها تلقائيًا عند إنشاء المجلدات الأصلية غير الموجودة وتُرجع مسار المجلد الذي تم إنشاؤه.
- createDirectory(Path dir, FileAttribute<?>… attrs): تقوم هذه الطريقة بإنشاء دليل باستخدام المسار المعطى، إذا نجحت عملية إنشاء الدليل فسوف تعيد مسار الدليل الذي تم إنشاؤه. إذا كان الدليل موجودًا بالفعل فسوف تقوم بإلقاء استثناء nio.file.FileAlreadyExistsException.
- createFile(Path path, FileAttribute<?>… attrs): تقوم هذه الطريقة بإنشاء ملف فارغ جديد باستخدام المسار المعطى وتعيد مسار الملف الجديد المنشأ إذا نجحت عملية إنشاء الملف. إذا كان الملف موجودًا بالفعل فسوف تقوم بإلقاء استثناء nio.file.FileAlreadyExistsException.
- createTempDirectory(Path dir, String prefix, FileAttribute<?>… attrs): تقوم هذه الطريقة بإنشاء دليل مؤقت باستخدام المسار المعطى وستقوم بتوليد اسم للدليل باستخدام البادئة المعطاة. ستعيد مسار الدليل المؤقت الجديد الذي تم إنشاؤه.
- createTempDirectory(String prefix, FileAttribute<?>… attrs): تقوم هذه الطريقة بإنشاء دليل مؤقت في دليل الملفات المؤقتة الافتراضي وتوليد اسم للدليل باستخدام البادئة المعطاة. ستعيد مسار الدليل المؤقت الجديد الذي تم إنشاؤه والذي يرتبط بنظام الملفات الافتراضي.
- createTempFile(Path dir, String prefix, String suffix, FileAttribute<?>… attrs): تقوم هذه الطريقة بإنشاء ملف مؤقت في الدليل المحدد وتوليد اسم للملف باستخدام البادئة واللاحقة المعطاة وتعيد مسار الملف الجديد المنشأ.
- createTempFile(String prefix, String suffix, FileAttribute<?>… attrs): تقوم هذه الطريقة بإنشاء ملف مؤقت في دليل الملفات المؤقتة الافتراضي وتوليد اسم الملف باستخدام البادئة واللاحقة المعطاة وتعيد مسار الملف الجديد المُنشأ.
- delete(Path path): هذه طريقة فارغة وتقوم ببساطة بحذف الملف من المسار المحدد. تقوم هذه الطريقة بإلقاء NoSuchFileException إذا كان الملف غير موجود في المسار المحدد، وإذا كان الملف هو دليل ولا يمكن حذفه بسبب عدم فراغه، في هذه الحالة ستُلقى
- deleteIfExists(Path path): تقوم هذه الطريقة بالتحقق مما إذا كان الملف موجودًا قبل حذفه وتعيد قيمة بوليانية true إذا تم حذف الملف بنجاح في المسار المعطى وتعيد قيمة false إذا كان الملف غير موجود في المسار المعطى. إذا كان الملف هو دليل ولا يمكن حذفه بسبب عدم فراغه، في هذه الحالة ستُلقى
- exists(Path path): تقوم هذه الطريقة بالتحقق مما إذا كان الملف موجودًا في المسار المحدد وإذا كان الملف موجودًا فستعيد قيمة صحيحة وإلا ستعيد قيمة خاطئة.
- getLastModifiedTime(Path path, Linkoption… options): تقوم هذه الطريقة بإرجاع وقت آخر تعديل للملف من المسار المعطى ك
- getOwner(Path path, Linkoption… options): تقوم هذه الطريقة بإرجاع UserPrincipal الذي يمثل مالك الملف في المسار المعطى.
- isDirectory(Path path, Linkoption… options): هذه الطريقة تتحقق مما إذا كان الملف هو دليل من المسار المعطى. تعيد قيمة صحيحة إذا كان الملف هو دليل وكاذبة إذا لم يكن الملف موجودًا أو ليس دليلًا أو لا يمكن تحديد ما إذا كان الملف دليلًا أم لا.
- isExecutable(Path path): تقوم هذه الطريقة بالتحقق مما إذا كان الملف في المسار المعطى قابلاً للتنفيذ أم لا، وتتحقق أيضًا مما إذا كان الملف موجودًا وما إذا كان لديك هذا المخزن JVM الامتياز الكافي لتنفيذ الملف. تعيد قيمة صحيحة إذا كان الملف موجودًا في المسار المعطى وقابل للتنفيذ، وكاذبة إذا لم يكن الملف موجودًا أو إذا لم تكن لدى JVM الامتياز الكافي لتنفيذ الملف أو لا يمكن تحديد الوصول.
- isHidden(Path path): تخبر هذه الطريقة ما إذا كان الملف في المسار المعطى معتبرًا مخفيًا أم لا. تعتمد التعريف الدقيق للمخفي على النظام الأساسي أو موفر الخدمة. في حالة نظام UNIX، يُعتبر الملف مخفيًا إذا كان اسم الملف يبدأ بحرف نقطة (‘.’). وفي حالة WINDOWS، يُعتبر الملف مخفيًا إذا لم يكن دليلاً وتم تعيين سمة الإخفاء DOS. تعيد قيمة صحيحة إذا كان الملف في المسار المعطى معتبرًا مخفيًا، وإلا فتعيد كاذبة.
- isReadable(Path path): تختبر هذه الطريقة ما إذا كان الملف في المسار المعطى قابلاً للقراءة أم لا. تعيد قيمة صحيحة إذا كان الملف في المسار المحدد موجودًا وقابلًا للقراءة، وكاذبة إذا لم يكن الملف موجودًا أو تم رفض الوصول إليه بسبب عدم حصول JVM على الامتياز الكافي أو لا يمكن تحديد الوصول.
- isWritable(Path path): تختبر هذه الطريقة ما إذا كان الملف في المسار المعطى قابلاً للكتابة أم لا. إذا كان الملف في المسار المحدد موجودًا وقابلًا للكتابة، فإنها تعيد قيمة صحيحة، وإذا كان الملف غير موجود أو تم رفض الوصول إلى الكتابة لأن JVM ليس لديها الامتياز الكافي أو لا يمكن تحديد الوصول، فإنها تعيد قيمة خاطئة.
- move(Path source, Path target, CopyOption… options): تقوم هذه الطريقة بنقل أو إعادة تسمية ملف المصدر إلى ملف الهدف وتعيد مسار ملف الهدف. يمكن أن تشمل معلمة الخيار الآتية: REPLACE_EXISTING: يعني إذا كان ملف الهدف موجودًا ثم يستبدله إذا لم يكن مجلدًا فارغًا. ATOMIC_MOVE: يعني أن النقل يتم كعملية ذاتية الملف وتتجاهل كل الخيارات الأخرى. تلقي هذه الطريقة استثناء FileAleadyExistsException إذا كان ملف الهدف موجودًا ولكن لا يمكن استبداله لأن الخيار REPLACE_EXISTING لم يتم تحديده. تلقي هذه الطريقة استثناء DirectoryNotEmptyException إذا كان الخيار REPlACE_EXISTING محددًا ولكن لا يمكن استبدال الملف لأنه مجلد غير فارغ.
- newBufferedReader(Path path, Charset cs): تفتح هذه الطريقة ملفًا باستخدام المسار المعطى للقراءة عن طريق إرجاع BufferedReader يُستخدم لقراءة النص من الملف. يتم فك تشفير البايتات من الملف إلى أحرف باستخدام ترميز الحروف المحدد.
- newBufferedWriter(Path path, Charset cs, Openoption… options): يفتح هذا الأسلوب أو ينشئ ملفًا باستخدام المسار المعطى للكتابة عن طريق إرجاع BufferedWriter المستخدم لكتابة النص إلى الملف. يحدد معلم الخيارات كيفية إنشاء الملف أو فتحه. إذا لم يتم تحديد أي خيار ، فإنه يعتبر خيارات الإنشاء CREATE و TRUNCATE_EXISTING و WRITE افتراضيًا ، وهذا يعني فتح الملف للكتابة وإنشاءه إذا لم يكن موجودًا أو قص الملف الموجود إلى حجم 0 إذا كان موجودًا. يلقي هذا الأسلوب استثناء UnsupportedOperationException إذا تم تحديد خيار غير مدعوم.
- newByteChannel(Path path, OpenOption… options): ينشئ هذا الأسلوب أو يفتح الملف باستخدام المسار المحدد عن طريق إرجاع قناة بايت قابلة للبحث للوصول إلى الملف. يلقي هذا الأسلوب استثناء UnsupportedOperationException إذا تم تحديد خيار غير مدعوم.
- newDirectoryStream(Path path): يفتح هذا الأسلوب دليلًا عن طريق إرجاع DirectoryStream لتكرار جميع الإدخالات في الدليل من المسار المحدد. العناصر التي يعيدها مكرر DirectoryStream هي من النوع Path ويمثل كل منها إدخالًا في الدليل. يلقي هذا الأسلوب استثناء NotDirectoryException إذا لم يمكن فتح الملف في المسار المعطى لأنه ليس دليلاً.
- newDirectoryStream(Path path, Filter<? super Path > filter): تفتح هذه الطريقة دليلاً بإرجاع DirectoryStream لتكرار جميع الإدخالات في الدليل من المسار المحدد. العناصر التي تعيدها محدد التكرار DirectoryStream هي من نوع Path، وكل عنصر يمثل إدخالًا في الدليل ويتم تصفيتها بواسطة المرشح المحدد. تُلقي هذه الطريقة استثناء NotDirectoryException إذا كان من المستحيل فتح الملف في المسار المعطى لأنه ليس دليلًا.
- newDirectoryStream(Path path, String glob): تفتح هذه الطريقة دليلاً بإرجاع DirectoryStream لتكرار جميع الإدخالات في الدليل من المسار المحدد. العناصر التي تعيدها محدد التكرار DirectoryStream هي من نوع Path، وكل عنصر يمثل إدخالًا في الدليل ويتم تصفيتها بمطابقة التمثيل النصي لأسماء ملفاتها مع النمط المعمول به المحدد. تُلقي هذه الطريقة استثناء NotDirectoryException إذا كان من المستحيل فتح الملف في المسار المعطى لأنه ليس دليلًا، واستثناء PatternSyntaxException إذا كان النمط غير صالح.
- newInputStream(Path path, Openoption… options): تفتح هذه الطريقة ملفًا بإرجاع تدفق الإدخال لقراءة الملف من المسار المحدد. يُحدد معلم الخيارات كيفية فتح الملف، وإذا لم يتم تحديد خيارات فإنه يفتح الملف بالقراءة فقط. تُلقي هذه الطريقة استثناء IllegalArgumentException إذا تم تحديد مجموعة غير صالحة من الخيارات واستثناء UnsupportedOperationException إذا تم تحديد خيار غير مدعوم.
- newOutputStream(Path path, Openoption… options): تفتح هذه الطريقة ملفًا بإرجاع تيار الإخراج لكتابة البايتات إلى الملف في المسار المحدد. يحدد معلم الخيارات كيفية فتح الملف وإذا لم يتم تحديد أي خيار ، فإنه يعتبر خيارات CREATE، TRUNCATE_EXISTING و WRITE افتراضيًا ، وهذا يعني أنه يفتح الملف للكتابة وينشئه إذا لم يكن الملف موجودًا أو يقوم بقص الملف الموجود إلى حجم 0 إذا كان موجودًا. تقوم هذه الطريقة برمي استثناء IllegalArgumentException إذا تم تحديد مجموعة غير صالحة من الخيارات و UnsupportedOperationException إذا تم تحديد خيار غير مدعوم.
- notExists(Path path, LinkOption options): تختبر هذه الطريقة ما إذا كان الملف في المسار المحدد غير موجود. يُستخدم معلم الخيارات للإشارة إلى كيفية معالجة الروابط الرمزية إذا كان الملف رابطًا رمزيًا. افتراضيًا ، يتم اتباع الروابط الرمزية. إذا كان الخيار NOFOLLOW_LINK موجودًا ، فإن الروابط الرمزية لا تُتبع. تقوم هذه الطريقة بإرجاع قيمة صحيحة إذا كان الملف غير موجود في المسار المحدد وقيمة خاطئة إذا كان الملف موجودًا أو إذا لم يمكن تحديد وجوده.
- readAllBytes(Path path): تقوم هذه الطريقة بقراءة جميع البايتات من الملف في المسار المعطى وترجع مصفوفة البايتات التي تحتوي على البايتات المقروءة من الملف.
- readAllLines(Path path, Charset cs): تقوم هذه الطريقة بقراءة جميع الأسطر من الملف في المسار المعطى وترجع List تحتوي على الأسطر من الملف.
- حجم(Path path): تُعيد هذه الطريقة حجم الملف في المسار المحدد بالبايتات.
- walkFileTree(Path start, FileVisitor<? Super Path> visitor): تُستخدم هذه الطريقة لتصفح الدليل. تقوم بتصفح الدليل في المسار المحدد بشكل متكرر وتُعيد الملف البدئي.
- write(Path path, byte[] bytes, OpenOption… options): تقوم هذه الطريقة بكتابة البايتات إلى ملف في المسار المحدد. يُحدد معلم الخيارات كيفية إنشاء الملف أو فتحه. إذا لم يتم تحديد أي خيار ، فإنه يعتبر الخيارات CREATE، TRUNCATE_EXISTING و WRITE افتراضيًا ، وهذا يعني أنه يفتح الملف للكتابة وينشئه إذا لم يكن الملف موجودًا أو يقص ملف موجود إلى حجم 0 إذا كان موجودًا. يتم كتابة جميع البايتات في مصفوفة البايتات إلى الملف. تضمن هذه الطريقة أن يتم إغلاق الملف عندما يتم كتابة جميع البايتات وتُعيد مسار الملف المكتوب.
إنشاء ملف باستخدام فئة Files
توفر فئة Files الطريقة createFile(Path filePath, FileAttribute<?>… attrs)
لإنشاء ملف باستخدام Path
المحدد. دعنا نلقي نظرة على البرنامج المثالي التالي.
package com.journaldev.examples;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
/**
* Java Create file using Files class
*
* @author pankaj
*
*/
public class FilesCreateFileExample {
public static void main(String[] args) {
// تهيئة كائن Path
Path path = Paths.get("D:/data/file.txt");
// إنشاء ملف
try {
Path createdFilePath = Files.createFile(path);
System.out.println("File Created at Path : "+createdFilePath);
} catch (IOException e) {
e.printStackTrace();
}
}
}
مخرجات البرنامج السابق هي:
File Created at Path : D:\data\file.txt
إنشاء الدلائل باستخدام فئة الملفات
توفر فئة الملفات طرق createDirectory(Path dir, FileAttribute<?>… attrs)
و createDirectories(Path dir, FileAttribute<?>… attrs)
لإنشاء دليل واحد أو مستويات متعددة من الدلائل باستخدام Path
المحددة. دعنا نلقي نظرة على البرنامج المثالي أدناه.
package com.journaldev.examples;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
/**
* Java Create directories using Files class
*
* @author pankaj
*
*/
public class FilesCreateDirectoriesExample {
public static void main(String[] args) {
// تهيئة كائنات Path
Path path1 = Paths.get("D:/pankaj");
Path path2 = Paths.get("D:/pankaj/java7");
Path path3 = Paths.get("D:/pankaj/java7/Files");
try {
Path createdDir1 = Files.createDirectory(path1);//first level directory
Path createdDir2 = Files.createDirectory(path2);//second level directory
Path createdDir3 = Files.createDirectory(path3);//all level directories
System.out.println("First Level Directory Created at Path : "+createdDir1);
System.out.println("Second Level Directory Created at Path : "+createdDir2);
System.out.println("All Level Directories Created at Path : "+createdDir3);
} catch (Exception e) {
e.printStackTrace();
}
}
}
إخراج البرنامج أعلاه هو كالتالي:
First Level Directory Created at Path : D:\pankaj
Second Level Directory Created at Path : D:\pankaj\java7
All Level Directories Created at Path : D:\pankaj\java7\Files
تحويل ملف إلى مسار والعكس
يمكن تحويل كائنات الملف والمسار إلى بعضها البعض باستخدام الطرق التالية:
File file = new File(“D:/data/file.txt”);
Path path = file.toPath();
File file1 = path.toFile();
قراءة بيانات الملف باستخدام فئة الملفات
توفر فئة الملفات الطرق التالية لقراءة الملف.
readAllBytes(Path path)
: تقرأ هذه الطريقة جميع البايتات من الملف في المسار المعطى وتعيد مصفوفة البايتات التي تحتوي على البايتات المقروءة من الملف.readAllLines(Path path,Charsetcs)
: تقوم هذه الطريقة بقراءة جميع الأسطر من الملف في المسار المعطى وتعيد قائمة تحتوي على الأسطر من الملف.
لنلقِ نظرة على البرنامج المثالي أدناه.
package com.journaldev.examples;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
/**
* Java Files read file example
*
* @author pankaj
*
*/
public class FilesReadFileExample {
public static void main(String[] args) {
Path path = Paths.get("D:/data/file.txt");
try {
byte[] bs = Files.readAllBytes(path);
List<String> strings = Files.readAllLines(path);
System.out.println("Read bytes: \n"+new String(bs));
System.out.println("Read lines: \n"+strings);
} catch (Exception e) {
e.printStackTrace();
}
}
}
إخراج البرنامج أعلاه هو كالتالي:
Read bytes:
Hello world
This is Read file example
Thank you
Read lines:
[Hello world, This is Read file example, Thank you]
نسخ الملف باستخدام فئة الملفات
توفر فئة الملفات الطريقة copy(Path source, Path target, CopyOption… options)
التي تنسخ الملف المعطى المصدر إلى الملف المستهدف المحدد وتعيد مسار الملف المستهدف. لنلقِ نظرة على البرنامج المثالي أدناه:
package com.journaldev.examples;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
/**
* Java Files copy file example
*
* @author pankaj
*
*/
public class FilesCopyFileExample {
public static void main(String[] args) {
Path sourcePath = Paths.get("D:/data/sourceFile.txt");
Path targetPath = Paths.get("D:/data/targetFile.txt");
try {
Path path = Files.copy(sourcePath, targetPath,StandardCopyOption.REPLACE_EXISTING);//copy with REPLACE_EXISTING option
System.out.println("Target file Path : "+path);
System.out.println("Copied Content : \n"+new String(Files.readAllBytes(path)));
} catch (Exception e) {
e.printStackTrace();
}
}
}
إخراج البرنامج أعلاه هو كالتالي:
Target file Path : D:\data\targetFile.txt
Copied Content :
Hello world
This is Copy file example
Thank you
نقل الملف باستخدام فئة الملفات
توفر فئة ملفات جافا طريقة `move(Path source, Path target, CopyOption… options)` التي تقوم بنقل أو إعادة تسمية ملف المصدر إلى ملف الهدف وتعيد مسار ملف الهدف. يمكن أن يتضمن معلم الخيار الآتي:
REPLACE_EXISTING: يعني إذا كان ملف الهدف موجودًا ثم يستبدله إذا لم يكن مجلدًا فارغًا.
ATOMIC_MOVE: يعني أن النقل يتم كعملية ذاتية لنظام الملفات وتتجاهل جميع الخيارات الأخرى.
تُلقي هذه الطريقة استثناء `FileAleadyExistsException` إذا كان ملف الهدف موجودًا ولكن لا يمكن استبداله لأن خيار `REPLACE_EXISTING` غير محدد. تُلقي هذه الطريقة استثناء `DirectoryNotEmptyException` إذا تم تحديد الخيار `REPLACE_EXISTING` ولكن لا يمكن استبدال الملف لأنه مجلد غير فارغ. دعنا نلقي نظرة على البرنامج المثالي أدناه:
package com.journaldev.examples;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
/**
* Java Files move file example
*
* @author pankaj
*
*/
public class FilesMoveFileExample {
public static void main(String[] args) {
Path sourcePath = Paths.get("D:/data/sourceFile.txt");
Path targetPath = Paths.get("D:/data/targetFile.txt");
try {
Path path = Files.move(sourcePath, targetPath,StandardCopyOption.REPLACE_EXISTING);//move with REPLACE_EXISTING option
System.out.println("Target file Path : "+path);
System.out.println("Moved Content : \n"+new String(Files.readAllBytes(path)));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Write File using Files Class
توفر فئة Java NIO Files الأسلوب write(Path path, byte[] bytes, OpenOption… options)
الذي يكتب البايتات إلى ملف في المسار المحدد. يحدد معلم الخيارات كيفية إنشاء الملف أو فتحه. إذا لم يتم تحديد أي خيار ، فإنه يعتبر الخيارات CREATE، TRUNCATE_EXISTING و WRITE افتراضيًا. وهذا يعني أنه يفتح الملف للكتابة وينشئه إذا لم يكن الملف موجودًا أو يقوم بتقليم الملف الحالي إلى حجم 0 إذا كان موجودًا. يتم كتابة جميع البايتات في مصفوفة البايتات إلى الملف. يضمن هذا الأسلوب إغلاق الملف عندما يتم كتابة جميع البايتات ويعيد مسار الملف المكتوب.
package com.journaldev.examples;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
/**
* Java Files write file example
*
* @author pankaj
*
*/
public class FilesWriteFileExample {
public static void main(String[] args) {
Path path = Paths.get("D:/data/test.txt");
try {
String str = "This is write file Example";
byte[] bs = str.getBytes();
Path writtenFilePath = Files.write(path, bs);
System.out.println("Written content in file:\n"+ new String(Files.readAllBytes(writtenFilePath)));
} catch (Exception e) {
e.printStackTrace();
}
}
}
امشِ في شجرة الملفات
توفر فئة Files الأسلوب walkFileTree(Path start, FileVisitor<? Super Path> visitor) الذي يستخدم لتصفح الدليل. يتصفح الدليل في المسار المحدد بشكل تكراري ويعيد الملف البدء.
package com.journaldev.examples;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
/**
* Java Files walk file tree example
*
* @author pankaj
*
*/
public class FilesWalkFileTreeExample {
public static void main(String[] args) {
Path path = Paths.get("D:/pankaj");
try {
Files.walkFileTree(path, new FileVisitor<Path>() {
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
System.out.println("Post Visit Directory: "+dir);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
System.out.println("Pre Visit Directory: "+dir);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
System.out.println("Visit File: "+file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
System.out.println("Visit Failed File: "+file);
return FileVisitResult.CONTINUE;
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}
الناتج من البرنامج أعلاه هو كما يلي:
Pre Visit Directory: D:\pankaj
Pre Visit Directory: D:\pankaj\java6
Pre Visit Directory: D:\pankaj\java6\Files
Visit File: D:\pankaj\java6\Files\file.txt.txt
Post Visit Directory: D:\pankaj\java6\Files
Post Visit Directory: D:\pankaj\java6
Pre Visit Directory: D:\pankaj\java7
Pre Visit Directory: D:\pankaj\java7\Files
Visit File: D:\pankaj\java7\Files\file.txt.txt
Post Visit Directory: D:\pankaj\java7\Files
Post Visit Directory: D:\pankaj\java7
Pre Visit Directory: D:\pankaj\java8
Pre Visit Directory: D:\pankaj\java8\Files
Visit File: D:\pankaj\java8\Files\file.txt.txt
Post Visit Directory: D:\pankaj\java8\Files
Post Visit Directory: D:\pankaj\java8
Post Visit Directory: D:\pankaj
لاحظ أن جميع الملفات والمجلدات يتم معالجتها بشكل تكراري. هذا مفيد جدًا عندما ترغب في القيام ببعض المعالجة الشائعة على جميع الملفات ، مثل إعادة تسمية جميع الملفات في دليل بشكل متكرر. هذا كل شيء بالنسبة لفئة Java Files. المرجع: وثائق واجهة برمجة التطبيقات
Source:
https://www.digitalocean.com/community/tutorials/java-files-nio-files-class