Input/output with files
ในบทนี้ คุณจะได้เรียนรู้การทำงานกับไฟล์ การอ่าน text file และการเขียนข้อมูลลงบน text file ในภาษา Java
นอกจากหน่วยความจำสำรอง (ram) ที่สามารถเก็บข้อมูลได้ชั่วคราว ยังมีการเก็บข้อมูลในรูปแบบไฟล์ในแหล่งเก็บข้อมูลภายนอก เช่น ฮาร์ดดิส ซึ่งในบางครั้งโปรแกรมต้องบันทึกข้อมูลเก็บไว้ในการใช้งานครั้งต่อไป หรืออ่านข้อมูลจากไฟล์มาประมวลผลในโปรแกรม ในบทเรียนนี้เราจะพูดเกี่ยวกับการใช้ภาษา Java เพื่อจัดการกับ text files ซึ่งเป็นไฟล์ประเภทพื้นฐาน
การอ่านข้อมูลจาก text files
ต่อไปเป็นตัวอย่างการอ่านค่าจาก text file ในภาษา Java ซึ่งเราจะใช้คลาส BufferedReader
ในการอ่านจากไฟล์ทีละบรรทัดและแสดงผลออกทางหน้าจอ
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class ReadFromFile {
public static void main(String[] args) {
try {
Path file = Paths.get("D:\\example.txt");
BufferedReader reader = Files.newBufferedReader(file ,
StandardCharsets.UTF_8);
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
} catch (IOException e) {
System.err.println("IOException: " + e.getMessage());
}
}
}
ในโค้ดข้างบนเป็นตัวอย่างของการอ่านไฟล์อย่างง่าย ในตอนแรกเราได้ทำการ import คลาสจากหลาย package เพื่อนำมาใช้ในโปรแกรมอ่านไฟล์ของเรา และประกาศตัวแปรที่ใช้ในการอ่านไฟล์โดยตัวแปร file
เป็นพาธของไฟล์ในการอ่าน reader
เป็นตัวแปรที่ใช้สำหรับอ่านไฟล์ และ line
เป็นตัวแปรเก็บค่าชั่วคราวที่ผ่านมากจากไฟล์
reader = Files.newBufferedReader(file, StandardCharsets.UTF_8);
ต่อมาเป็นการเปิดไฟล์เพื่ออ่าน ด้วยเมธอด Files.newBufferedReader()
มันมีสองอากิวเมนต์คือพาธของไฟล์ และ charset ที่จะเปิดอ่านเราใช้เป็น StandardCharsets.UTF_8
เพื่อที่จะอ่านได้ทุกภาษา
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
นี่เป็นลูปในการอ่านไฟล์ โดยเมธอด reader.readLine()
จะอ่านข้อมูลจากไฟล์ที่ละบรรทัด จนกว่าค่าที่ส่งกลับมาจะเป็น null
ซึ่งหมายถึงสิ้นสุดของไฟล์ และนำมาไว้ในตัวแปร line และแสดงผลออกทางหน้าจอ
reader.close();
ในการเปิดไฟล์ทุกครั้ง จะต้องทำการปิดไฟล์เสมอโดยการใช้เมธอด close()
เพื่อให้ไฟล์สามารถนำไปใช้ได้ในโปรแกรมอื่นต่อไป
Hello,
Welcome to MarcusCode tutorial
This is reading from text file example
This file has 4 lines
นี่เป็นผลลัพธ์เมื่อรันโปรแกรมที่อ่านไฟล์จาก D:/example.txt
และผลลัพธ์ของคุณนั้นจะขึ้นกับข้อมูลในไฟล์ของคุณ
การเขียนข้อมูลลงบน text files
หลังจากที่ได้อ่านจากไฟล์แล้ว ต่อไปเป็นตัวอย่างในการเขียนข้อมูลลงไปบน text ไฟล์ ในภาษา Java เราจะใช้คลาส BufferedWriter
ในการที่จะเขียนข้อมูลลงไปบนไฟล์
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class WriteToFile {
public static void main(String[] args) {
try {
Path file = Paths.get("D:\\example2.txt");
BufferedWriter writer = Files.newBufferedWriter(file,
StandardCharsets.UTF_8);
for (int i = 0; i < 10; i++) {
writer.write("This is content line " + (i + 1));
writer.newLine();
}
writer.close();
} catch (IOException e) {
System.err.println("IOException: " + e.getMessage());
}
}
}
ในตัวอย่าง เป็นโปรแกรมเขียนข้อมูลลงไปใน text file โดยโปรแกรมจะเขียนข้อมูลลงไปในไฟล์ทีละบรรทัด ในตอนแรกเราได้ทำการ import package ที่จำเป็นในการใช้สำหรับการเขียนไฟล์
Path file = Paths.get("D:\\example2.txt");
BufferedWriter writer = Files.newBufferedWriter(file,
StandardCharsets.UTF_8);
เรากำหนดพาธของไฟล์ที่จะใช้ในการอ่าน และสร้างตัวแปรออบเจ็ค writer
เพื่อที่จะเขียนไฟล์ โดยใส่อากิวเมนต์สองตัวคือพาธไฟล์และโหมดการเขียนที่เป็นแบบ UTF-8
for (int i = 0; i < 10; i++) {
writer.write("This is content line " + (i + 1));
writer.newLine();
}
นี่เป็นการใช้ลูปในการเขียนไฟล์ โดยเขียนลงไปทั้งหมด 10 บรรทัด เมธอด writer.write()
เป็นเมธอดที่ใช้เขียนข้อความลงไปบนไฟล์ และเมธอด writer.newLine()
เป็นการเขียนบรรทัดใหม่ลงไปบนไฟล์
writer.close();
เราปิดไฟล์ที่เปิดขึ้นมา เพื่อให้โปรแกรมอื่นสามารถนำไปใช้ได้ต่อไป
This is content line 1
This is content line 2
This is content line 3
This is content line 4
This is content line 5
This is content line 6
This is content line 7
This is content line 8
This is content line 9
This is content line 10
นี่เป็นข้อมูลในไฟล์ example2.txt
ที่เราได้เขียนลงไป
ซึ่งเกิดจากการเขียนไฟล์ จากตัวอย่างนั้นเป็นการเขียนลงบนไฟล์อย่างง่าย และในการรันโปรแกรมแต่ละครั้งโปรแกรมลบไฟล์เดิมทิ้งและเขียนใหม่เสมอ บางทีคุณอาจจะต้องการเขียนต่อจากไฟล์เดิม เช่น การเก็บ Log ต่างๆ ซึ่งคุณสามารถใส่อากิวเมนต์ตัวที่สามในการสร้างออบเจ็ค BufferedWriter
ได้ดังนี้
BufferedWriter writer = Files.newBufferedWriter(file,
StandardCharsets.UTF_8, StandardOpenOption.APPEND);
ในบทเรียนนี้ คุณได้เรียนรู้เกี่ยวกับวิธีการทำงานกับ text files ทั้งการอ่านข้อมูลจากไฟล์ และการเขียนข้อมูลลงไปบนไฟล์ในภาษา Java ซึ่งเป็นสิ่งที่จำเป็นในการเขียนโปรแกรม