לפעמים בעת עבודה עם קבצים, אנו צריכים לקרוא את הקובץ למחרוזת ב־Java. היום נבחן מספר דרכים שונות לקרוא את הקובץ למחרוזת ב־Java.
קריאת קובץ ב־Java למחרוזת
ישנן מספר דרכים לקרוא קובץ למחרוזת ב־Java. נבחן את הדרכים הבאות במדריך זה.
- קריאת קובץ ב־Java למחרוזת באמצעות BufferedReader
- קריאת קובץ למחרוזת ב־Java באמצעות FileInputStream
- קריאת קובץ ב־Java למחרוזת באמצעות מחלקת Files
- קריאת קובץ למחרוזת באמצעות מחלקת Scanner
- קריאת קובץ ב־Java למחרוזת באמצעות מחלקת FileUtils של Apache Commons IO
כעת נביט בפרט על המחלקות הללו ונקרא קובץ למחרוזת.
קריאת קובץ ב־Java למחרוזת באמצעות BufferedReader
אנו יכולים להשתמש בשיטת BufferedReader
readLine
כדי לקרוא קובץ שורה אחרי שורה. כל שעלינו לעשות הוא להוסיף את אלה לתוך אובייקט StringBuilder עם תו שורה חדשה. להלן קטע הקוד לקריאת הקובץ למחרוזת באמצעות 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();
ישנה דרך יעילה נוספת לקרוא קובץ למחרוזת באמצעות 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();
קריאת קובץ למחרוזת ב־Java באמצעות FileInputStream
ניתן להשתמש ב־FileInputStream ו־מערך byte כדי לקרוא קובץ למחרוזת. עליך להשתמש בשיטה זו כדי לקרוא קבצים שאינם מבוססים על char כמו קבצי תמונה, וידאו וכו'
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();
קריאת קובץ למחרוזת ב־Java באמצעות מחלקת Files
ניתן להשתמש במחלקת השימושיות Files כדי לקרוא את כל תוכן הקובץ למחרוזת בשורה אחת של קוד.
String content = new String(Files.readAllBytes(Paths.get(fileName)));
קריאת קובץ למחרוזת באמצעות מחלקת Scanner
מחלקת הסורק היא דרך מהירה לקרוא קובץ טקסט למחרוזת ב-Java.
Scanner scanner = new Scanner(Paths.get(fileName), StandardCharsets.UTF_8.name());
String content = scanner.useDelimiter("\\A").next();
scanner.close();
קריאת קובץ ב-Java למחרוזת באמצעות מחלקת Apache Commons IO FileUtils
אם אתה משתמש ב-Apache Commons IO בפרוייקט שלך, אז זו דרך פשוטה ומהירה לקרוא את הקובץ למחרוזת ב-Java.
String content = FileUtils.readFileToString(new File(fileName), StandardCharsets.UTF_8);
דוגמה לקריאת קובץ למחרוזת ב-Java
כאן התוכנית הסופית עם טיפול בחריגות המתאים והצגת כל הדרכים השונות לקרוא קובץ למחרוזת.
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());
// אנו יכולים להשתמש ב-Delimiter regex כמו "\\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. עם זאת, אין לך לייעץ לעשות זאת אם גודל הקובץ גדול מאוד מכיוון שישנה סיכון להתקל בשגיאות של חסר זיכרון.
אתה יכול לבדוק דוגמאות נוספות של Java IO מה־מאגר ה-GitHub שלנו.
הפניות:
Source:
https://www.digitalocean.com/community/tutorials/java-read-file-to-string