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 ซึ่งเป็นสิ่งที่จำเป็นในการเขียนโปรแกรม


บทความเกี่ยวกับ Input/output with files

Input/output with files ในภาษา C

ในบทสุดท้ายของบทเรียน นี้ เราจะเรียนรู้เกี่ยวกับไฟล์ในภาษา C เช่น การเปิดไฟล์ การอ่านข้อมูลจากไฟล์ และการเขียนข้อมูลลงไปบนไฟล์ ทั้ง text file และ binary file ใน...

Input/output with files ในภาษา C++

ในบทสุดท้ายของบทเรียนภาษา C++ นี้ คุณจะได้เรียนการดำเนินการพื้นฐานกับไฟล์ โดยเราสามารถที่อ่านและเขียนบางอย่างลงไปใน text ไฟล์ fstream เป็นไลบรารีมาตรฐานที่ช่วยใ...

Input/output with files ในภาษา PHP

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับการอ่านเขียนข้อมูลกับไฟล์ในภาษา PHP เราจะทำงานกับ Text filesในการเขียนโปรแกรม เรามักจะทำงานกับไฟล์ซึ่งอาจจะเป็น Text file หรือ ...

Input/output with files ในภาษา Visual Basic

ในบทนี้เราจะทำงานกับไฟล์ คุณจะได้เรียนรู้เกี่ยวกับการอ่านและเขียน text file ในภาษา Visual Basicโปรแกรมคอมพิวเตอร์มักจะทำงานกับไฟล์ ไฟล์ใช้สำหรับเก็บข้อมูลบนหน่ว...

Input/output with files ในภาษา C#

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับการเขียนโปรแกรมในการทำงานกับไฟล์ เพื่ออ่านข้อมูลจากไฟล์และเขียนข้อมูลลงไปบนไฟล์ในภาษา C#โปรแกรมคอมพิวเตอร์ส่วนมากทำงานกับไฟล์ ซ...