Java FileWriter
- כיתת FileWriter של Java היא חלק מחבילת
java.io
. - FileWriter היא מחלקת משנה של כיתת
java.io.OutputStreamWriter
. - FileWriter מיועדת לכתיבת זרמים של תווים.
- FileWriter משמשת לכתיבה לקבצי תווים. שיטות ה-
write()
שלה מאפשרות לך לכתוב תווים או מחרוזות לקובץ. - בדרך כלל FileWriter מעוטרות על ידי אובייקטים רמה גבוהה יותר של כותבים, כמו BufferedWriter או
PrintWriter
, שמספקים ביצועים טובים יותר ושיטות גבוהות יותר גמישות לכתיבת נתונים.
בנאי FileWriter
FileWriter(File file)
: יוצר אובייקט FileWriter באמצעות אובייקט קובץ מסוים. הוא זורקIOException
אם הקובץ כבר קיים אך הוא ספרייה במקום קובץ רגיל או שהוא לא קיים אבל אינו יכול להיות נוצר, או שאינו יכול להיפתח מכל סיבה אחרת.FileWriter(File file, boolean append)
: יוצר אובייקט FileWriter באמצעות אובייקט File מסוים. אם הפרמטר השני הוא נכון, אז בתיקייה יתבצע כתיבת בתיים לסיומת הקובץ במקום בתחילתו. יש לזרוק חריגת IOException אם הקובץ כבר קיים אך הוא ספרייה ולא קובץ רגיל, או שהקובץ אינו קיים אך אי אפשר ליצור אותו, או שאי אפשר לפתוח אותו מכל סיבה אחרת.FileWriter(FileDescriptor fd)
: יוצר אובייקט FileWriter הקשור למזהה קובץ מסוים.FileWriter(String fileName)
: יוצר אובייקט FileWriter באמצעות שם קובץ מסוים. יש לזרוק חריגתIOException
אם הקובץ בשם כבר קיים אך הוא ספרייה ולא קובץ רגיל, או שהקובץ אינו קיים אך אי אפשר ליצור אותו, או שאי אפשר לפתוח אותו מכל סיבה אחרת.FileWriter(String fileName, boolean append)
: יוצר אובייקט FileWriter באמצעות שם קובץ מסוים ומשתמש במשתנה בוליאני לצורך החלטה אם ל הוסיף את הנתונים שיוכתבו. אם הפרמטר השני הוא נכון, אז הנתונים יתווספו לסיומת הקובץ במקום בתחילתו. יש לזרוק חריגת IOException אם הקובץ בשם כבר קיים אך הוא ספרייה ולא קובץ רגיל, או שהקובץ אינו קיים אך אי אפשר ליצור אותו, או שאי אפשר לפתוח אותו מכל סיבה אחרת.
דוגמא לשימוש ב-FileWriter ב-Java
FileWriter יורש את השיטה של מחלקות java.io.OutputStreamWriter
ו־java.io.Writer
. בואו נסתכל על השיטות הבאות עם דוגמאות.
write(int c)
שיטה זו כותבת תו יחיד המוגדר על ידי int c.
package com.journaldev.io.filewriter;
import java.io.FileWriter;
import java.io.IOException;
/**
* Java write file using FileWriter write method
*
* @author pankaj
*
*/
public class FileWriterWriteIntExample {
public static void main(String[] args) {
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter("D:/data/file.txt");
//שיטת שורש מתוך java.io.OutputStreamWriter
fileWriter.write(65);
fileWriter.write(66);
fileWriter.write(67);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if (fileWriter != null) {
fileWriter.flush();
fileWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
FileWriter מיישם את ממשק
AutoCloseable
, לכן אנו יכולים להשתמש ב־נסיון עם משאבים בעת השימוש במחלקת FileWriter.
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter write method using try with resource
*
* @author pankaj
*
*/
public class FileWriterWriteIntTryWithResource {
public static void main(String[] args) {
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
//שיטת שורש מתוך java.io.OutputStreamWriter
fileWriter.write(65);
fileWriter.write(66);
fileWriter.write(67);
} catch (Exception e) {
e.printStackTrace();
}
}
}
הערה: בתוכנית הנ"ל fileWriter.write(65)
תכתוב את האות A לקובץ מאחר ו־65 הוא הערך העשרוני של התו A, לכן המספר השלם 65 יהפוך לתו A וכן לשאר הערכים.
write(String str, int off, int len)
שיטה זו כותבת חלק מהמחרוזת str
מ־off
עד len
.
- str: המחרוזת שיש לכתוב
- off: היסט מאיפה להתחיל בקריאת התווים
- len: מספר התווים שיש לכתוב
אם ערך הפרמטר len שלילי, אז אין לכתוב תווים.
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter write(String s, int off, int len) method
*
* @author pankaj
*
*/
public class FileWriterWriteStringExample {
public static void main(String[] args) {
String data = "This is FileWriter Example.";
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// שיטה השואפת מ java.io.OutputStreamWriter
fileWriter.write(data, 8, 10);
} catch (Exception e) {
e.printStackTrace();
}
}
}
write(char[] cbuf, int off, int len)
שיטה זו מכתיבה חלק ממערך של תווים שצויין על ידי char[] cbuf
ממספר השלם off
עד מספר השלם len
.
- cbuf: מערך של תווים
- off: היסט ממנו להתחיל לקרוא תווים
- len : מספר התווים לכתוב
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter write(char[] cbuf, int off, int len) method
*
* @author pankaj
*
*/
public class FileWriterWriteCharArray {
public static void main(String[] args) {
char[] data = "This is FileWriter Example.".toCharArray();
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// שיטה השואפת מ java.io.OutputStreamWriter
fileWriter.write(data, 8, 10);
} catch (Exception e) {
e.printStackTrace();
}
}
}
write(char[] cbuf)
שיטה זו מכתיבה את מערך התווים שצויין על ידי cbuf.
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter write(char[] cbuf) method
*
* @author pankaj
*
*/
public class FileWriterWriteCharArrayExample {
public static void main(String[] args) {
char[] data = "This is FileWriter Example.".toCharArray();
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// שיטה השואפת מ java.io.Writer
fileWriter.write(data);
} catch (Exception e) {
e.printStackTrace();
}
}
}
write(String str)
שיטה זו מכתיבה ערך מחרוזת לתוך הקובץ שצויין על ידי str
.
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter write(String str) method
*
* @author pankaj
*
*/
public class FileWriterWriteString {
public static void main(String[] args) {
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// שיטה השואפת מ java.io.Writer
fileWriter.write("JournalDev");
} catch (Exception e) {
e.printStackTrace();
}
}
}
append(char c)
שיטה זו מחברת את התו המצויין לכתוב הזה כאן כאשר c
הוא התו בגודל 16 ביטים שיש להוסיף.
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file using FileWriter append(char c) method
*
* @author pankaj
*
*/
public class FileWriterAppendCharacter {
public static void main(String[] args) {
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// שיטת שואפת מורשת מ־java.io.Writer
fileWriter.write("JournalDev");
fileWriter.append('C');
} catch (Exception e) {
e.printStackTrace();
}
}
}
flush()
שיטה זו מוחזקת את הזרם. כאשר נקראת שיטת flush()
, היא מוסיפה מיד את הנתונים לקובץ הפלט.
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file with FileWriter flush() method
*
* @author pankaj
*
*/
public class FileWriterFlushExample {
public static void main(String[] args) {
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// שיטת שואפת מורשת מ־java.io.Writer
fileWriter.write("JournalDev");
// שיטת שואפת מורשת מ־java.io.OutputStreamWriter
fileWriter.flush();
fileWriter.write(" Tutorials");
fileWriter.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
}
close()
שיטה זו מוחזקת את הזרם לפני סגירתו. לאחר סגירת הזרם, קריאה לשיטת write()
או flush()
תגרום להשגת יוצא מן הכלל, במקרה של IOException
. סגירת זרם שכבר נסגר לא תהיה לה כל תוקפה.
package com.journaldev.io.filewriter;
import java.io.FileWriter;
/**
* Java write file with FileWriter close() method
*
* @author pankaj
*
*/
public class FileWriterCloseExample {
public static void main(String[] args) {
try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
// שיטת שואפת מורשת מ־java.io.Writer
fileWriter.write("JournalDev");
// שיטת שואפת מורשת מ־java.io.OutputStreamWriter
fileWriter.close();;
fileWriter.write(" Tutorials");
} catch (Exception e) {
e.printStackTrace();
}
}
}
פלט:
java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(Unknown Source)
at sun.nio.cs.StreamEncoder.write(Unknown Source)
at sun.nio.cs.StreamEncoder.write(Unknown Source)
at java.io.OutputStreamWriter.write(Unknown Source)
at java.io.Writer.write(Unknown Source)
at com.journaldev.examples.FileWriterCloseExample.main(FileWriterCloseExample.java:20)
FileWriter vs FileOutputStream
- FileWriter הוא מיועד לכתיבת זרמים של תווים בעוד ש-FileOutputStream משמש לכתיבת זרמים של בתים גולמיים.
- FileWriter עוסק בתווים בעלי 16 ביט בעוד FileOutputStream עוסק בבתים בעלי 8 ביט.
- FileWriter יכול לעסוק במחרוזות יוניקוד בעוד FileOutputStream כותב בתים לקובץ ולא מקבל תווים או מחרוזות, ולכן יש צורך לעטוף אותו עם
OutputStreamWriter
כדי לקבל מחרוזות.
כדאי גם לבדוק java write file למידע נוסף על איך לכתוב קובץ ב-Java. זהו הכל לגבי Java FileWriter, אני מקווה שלא פספסנו כאן משהו חשוב.
ניתן להוריד את כל קודי הדוגמה מתיקיית ה-GitHub שלנו.
הפנייה: מסמך ה- API
Source:
https://www.digitalocean.com/community/tutorials/java-filewriter-example