דוגמה לשימוש ב- Java FileWriter

Java FileWriter

  • כיתת FileWriter של Java היא חלק מחבילת java.io.
  • FileWriter היא מחלקת משנה של כיתת java.io.OutputStreamWriter.
  • FileWriter מיועדת לכתיבת זרמים של תווים.
  • FileWriter משמשת לכתיבה לקבצי תווים. שיטות ה-write() שלה מאפשרות לך לכתוב תווים או מחרוזות לקובץ.
  • בדרך כלל FileWriter מעוטרות על ידי אובייקטים רמה גבוהה יותר של כותבים, כמו BufferedWriter או PrintWriter, שמספקים ביצועים טובים יותר ושיטות גבוהות יותר גמישות לכתיבת נתונים.

בנאי FileWriter

  1. FileWriter(File file): יוצר אובייקט FileWriter באמצעות אובייקט קובץ מסוים. הוא זורק IOException אם הקובץ כבר קיים אך הוא ספרייה במקום קובץ רגיל או שהוא לא קיים אבל אינו יכול להיות נוצר, או שאינו יכול להיפתח מכל סיבה אחרת.
  2. FileWriter(File file, boolean append): יוצר אובייקט FileWriter באמצעות אובייקט File מסוים. אם הפרמטר השני הוא נכון, אז בתיקייה יתבצע כתיבת בתיים לסיומת הקובץ במקום בתחילתו. יש לזרוק חריגת IOException אם הקובץ כבר קיים אך הוא ספרייה ולא קובץ רגיל, או שהקובץ אינו קיים אך אי אפשר ליצור אותו, או שאי אפשר לפתוח אותו מכל סיבה אחרת.
  3. FileWriter(FileDescriptor fd): יוצר אובייקט FileWriter הקשור למזהה קובץ מסוים.
  4. FileWriter(String fileName): יוצר אובייקט FileWriter באמצעות שם קובץ מסוים. יש לזרוק חריגת IOException אם הקובץ בשם כבר קיים אך הוא ספרייה ולא קובץ רגיל, או שהקובץ אינו קיים אך אי אפשר ליצור אותו, או שאי אפשר לפתוח אותו מכל סיבה אחרת.
  5. 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