بعض الأحيان أثناء العمل مع الملفات، نحتاج إلى قراءة الملف إلى سلسلة نصية في لغة البرمجة جافا. اليوم سنلقي نظرة على طرق مختلفة لقراءة الملف إلى سلسلة نصية في جافا.
قراءة ملف جافا إلى سلسلة نصية
هناك العديد من الطرق لقراءة ملف إلى سلسلة نصية في جافا. سنتناول الطرق التالية في هذا البرنامج التعليمي.
- قراءة ملف جافا إلى سلسلة نصية باستخدام BufferedReader
- قراءة ملف إلى سلسلة نصية في جافا باستخدام FileInputStream
- قراءة ملف جافا إلى سلسلة نصية باستخدام فئة Files
- قراءة ملف إلى سلسلة نصية باستخدام فئة Scanner
- قراءة ملف جافا إلى سلسلة نصية باستخدام فئة Apache Commons IO FileUtils
الآن دعونا نلقي نظرة على هذه الفئات ونقوم بقراءة ملف إلى سلسلة نصية.
قراءة ملف جافا إلى سلسلة نصية باستخدام BufferedReader
يمكننا استخدام طريقة readLine
الخاصة بBufferedReader
لقراءة ملف سطرًا بسطر. كل ما علينا فعله هو إلحاق هذه بكائن StringBuilder مع حرف السطر الجديد. أدناه مقتطف الكود لقراءة الملف إلى String باستخدام BufferedReader.
BufferedReader reader = new BufferedReader(new FileReader(fileName));
StringBuilder stringBuilder = new StringBuilder();
String line = null;
String ls = System.getProperty("line.separator");
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append(ls);
}
// حذف فاصل السطر الجديد الأخير
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
reader.close();
String content = stringBuilder.toString();
هناك طريقة أخرى فعالة لقراءة الملف إلى String باستخدام BufferedReader ومصفوفة char.
BufferedReader reader = new BufferedReader(new FileReader(fileName));
StringBuilder stringBuilder = new StringBuilder();
char[] buffer = new char[10];
while (reader.read(buffer) != -1) {
stringBuilder.append(new String(buffer));
buffer = new char[10];
}
reader.close();
String content = stringBuilder.toString();
قراءة الملف إلى String في java باستخدام FileInputStream
يمكننا استخدام FileInputStream ومصفوفة byte لقراءة الملف إلى String. يجب استخدام هذه الطريقة لقراءة الملفات التي ليست مبنية على الأحرف مثل الصور، الفيديوهات إلخ.
FileInputStream fis = new FileInputStream(fileName);
byte[] buffer = new byte[10];
StringBuilder sb = new StringBuilder();
while (fis.read(buffer) != -1) {
sb.append(new String(buffer));
buffer = new byte[10];
}
fis.close();
String content = sb.toString();
قراءة ملف إلى string باستخدام فئة Files في Java
يمكننا استخدام فئة الأدوات Files لقراءة كل محتوى الملف إلى string في سطر واحد من الكود.
String content = new String(Files.readAllBytes(Paths.get(fileName)));
اقرأ الملف إلى سلسلة باستخدام فئة Scanner
فئة Scanner هي طريقة سريعة لقراءة ملف نصي إلى سلسلة في جافا.
Scanner scanner = new Scanner(Paths.get(fileName), StandardCharsets.UTF_8.name());
String content = scanner.useDelimiter("\\A").next();
scanner.close();
جافا قراءة ملف إلى سلسلة باستخدام فئة Apache Commons IO FileUtils
إذا كنت تستخدم Apache Commons IO في مشروعك، فهذه طريقة بسيطة وسريعة لقراءة الملف إلى سلسلة في جافا.
String content = FileUtils.readFileToString(new File(fileName), StandardCharsets.UTF_8);
مثال جافا على قراءة ملف إلى سلسلة
إليك البرنامج النهائي مع التعامل السليم مع الاستثناءات وعرض جميع الطرق المختلفة لقراءة ملف إلى سلسلة.
package com.journaldev.files;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Scanner;
import org.apache.commons.io.FileUtils;
public class JavaReadFileToString {
/**
* This class shows different ways to read complete file contents to String
*
* @param args
* @throws IOException
*/
public static void main(String[] args) {
String fileName = "/Users/pankaj/Downloads/myfile.txt";
String contents = readUsingScanner(fileName);
System.out.println("*****Read File to String Using Scanner*****\n" + contents);
contents = readUsingApacheCommonsIO(fileName);
System.out.println("*****Read File to String Using Apache Commons IO FileUtils*****\n" + contents);
contents = readUsingFiles(fileName);
System.out.println("*****Read File to String Using Files Class*****\n" + contents);
contents = readUsingBufferedReader(fileName);
System.out.println("*****Read File to String Using BufferedReader*****\n" + contents);
contents = readUsingBufferedReaderCharArray(fileName);
System.out.println("*****Read File to String Using BufferedReader and char array*****\n" + contents);
contents = readUsingFileInputStream(fileName);
System.out.println("*****Read File to String Using FileInputStream*****\n" + contents);
}
private static String readUsingBufferedReaderCharArray(String fileName) {
BufferedReader reader = null;
StringBuilder stringBuilder = new StringBuilder();
char[] buffer = new char[10];
try {
reader = new BufferedReader(new FileReader(fileName));
while (reader.read(buffer) != -1) {
stringBuilder.append(new String(buffer));
buffer = new char[10];
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null)
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return stringBuilder.toString();
}
private static String readUsingFileInputStream(String fileName) {
FileInputStream fis = null;
byte[] buffer = new byte[10];
StringBuilder sb = new StringBuilder();
try {
fis = new FileInputStream(fileName);
while (fis.read(buffer) != -1) {
sb.append(new String(buffer));
buffer = new byte[10];
}
fis.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fis != null)
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
private static String readUsingBufferedReader(String fileName) {
BufferedReader reader = null;
StringBuilder stringBuilder = new StringBuilder();
try {
reader = new BufferedReader(new FileReader(fileName));
String line = null;
String ls = System.getProperty("line.separator");
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append(ls);
}
// حذف آخر ls
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null)
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return stringBuilder.toString();
}
private static String readUsingFiles(String fileName) {
try {
return new String(Files.readAllBytes(Paths.get(fileName)));
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
private static String readUsingApacheCommonsIO(String fileName) {
try {
return FileUtils.readFileToString(new File(fileName), StandardCharsets.UTF_8);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
private static String readUsingScanner(String fileName) {
Scanner scanner = null;
try {
scanner = new Scanner(Paths.get(fileName), StandardCharsets.UTF_8.name());
// يمكننا استخدام تعبيرات الفاصل كـ "\\A"، "\\Z" أو "\\z"
String data = scanner.useDelimiter("\\A").next();
return data;
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
if (scanner != null)
scanner.close();
}
}
}
يمكنك استخدام أي من الطرق المذكورة أعلاه لقراءة محتوى الملف إلى سلسلة في جافا. ومع ذلك، فإنه ليس من النصح به إذا كان حجم الملف كبيرًا لأنك قد تواجه أخطاء في نفاد الذاكرة.
يمكنك التحقق من المزيد من أمثلة Java IO في مستودعنا على GitHub.
المراجع:
Source:
https://www.digitalocean.com/community/tutorials/java-read-file-to-string