Transcript Slide 1

ทำงำนกับไฟล ์ (File I/O)


ไฟล ์ (File) คือ ข้อมูลตำงๆ
ทีถ
่ ูกจัดเก็บและ
่
บันทึกไวในหน
้
่ วยควำมจำของคอมพิวเตอร ์ มี
หลำกหลำยประเภท เช่น ไฟลข
้ ลเอกสำร
์ อมู
ไฟลรู์ ป เป็ นตน
้
โปรแกรมจะอำนหรื
อเขียนขอมู
่
้ ลเหลำนั
่ ้นโดยมี
สะพำนส่งผำนข
อมู
ำงกลำง
ใช้ส่งขอมู
่
้ ลอยูระหว
่
่
้ ล
จำกต้นทำง (source) ไปยังปลำยทำง (sink) และ
เมือ
่ มีกำรอำนหรื
อเขียนขอมู
้ จะ
่
้ ลผำนสะพำนนี
่
เรียกวำ่ Stream และจะถูกนำไปใช้ในกำร
กระบวนกำรของโปรแกรมนั่นเอง
2



File Stream หมำยถึง ทอส
น
่ ่ งขอมู
้ ลไฟลจำกต
์
้
ทำงไปยังปลำยทำง
ประกอบดวยคลำส
FileInputStream /
้
FileOutputStream สำหรับ
กำรอำนและเขี
ยนขอมู
่
้ ล โดยเมธอดของคลำสจะ
อยูในแพ็
คเกจ java.io
่
มีคลำสสำหรับกำรสรำงออบเจ็
กต ์ Stream 4
้
คลำส ไดแก
้ ่


InputStream ใช้ในกำรรับชนิดขอมู
้ ลแบบ byte หรือ
numeric type
OutputStream ใช้ในกำรส่งชนิดขอมู
้ ลแบบ byte หรื3อ




เป็ นกำรเขียนและอำนไฟล
ครั
่
์ ง้ ละ 1 ไบต ์ (8 บิต)
ใช้สำหรับรับส่งขอมู
้ ลประเภท Byte หรือขอมู
้ ล
ประเภทตัวเลข (Numeric)
จะต้องทำผำนคลำส
FileOutputStream และ
่
FileInputStream
ซึง่ อยูในแพ็
คแกจ java.io.OutputStream และ
่
java.io.InputStream ตำมลำดับ
ข้อมูลถูกจัดเก็บเป็ นไบต ์ (Binary File) และไม่
สำมำรถจะอำนเข
ำใจได
่
้
้
4

จะใช้งำนคลำส File รวมกั
บคลำส FileOutputStream
่
ในกำรเขียนขอมู
้ ลลงไฟล ์ โดยใช้เมธอด write() ของ
คลำส FileOutputStream มีรูปแบบดังนี้
File filename = new File(“path”);
FileOutputStream fOutput = new
FileOutputStream(filename, append);
fOutput.write(data);
หรือ
FileOutputStream fOutput = new FileOutputStream(path,
append);
fOutput.write(data);
โดยที่
path
เป็ นชือ
่ และตำแหน่งทีอ
่ ยูของไฟล
่
์
filename
เป็ นออบเจ็กตที
่ รำงจำกคลำส
File
้
์ ส
5


จะใช้งำนคลำส File รวมกั
บคลำส FileInputStream
่
ในกำรอำนข
อมู
่
้ ลจำกไฟล ์
ใช้เมธอด read() ของคลำส FileInputStream และจะ
คืนคำเป็
่ อำนข
อมู
่ นเลขจำนวนเต็ม -1 เมือ
่
้ ลถึงไบต ์
สุดทำยของไฟล
้
์ มีรูปแบบ ดังนี้
File filename = new File(“path”);
FileInputStream fInput = new FileInputStream (filename);
data = fInput.read();
หรือ
FileInputStream fOutput = new FileInputStream (path);
data = fOutput.read();
โดยที่
path
เป็ นชือ
่ และตำแหน่งทีอ
่ ยูของไฟล
่
์
filename
เป็ นออบเจ็กตที
่ รำงจำกคลำส
File
้
์ ส
6

ByteTest
7




เป็ นกำรอำนและเขี
ยนไฟลครั
่
์ ง้ ละ 2 ไบต ์ (16
บิต)
ใช้สำหรับรับส่งขอมู
้ ลประเภทตัวอักขระ
(Character)
จัดกำรโดยใช้คลำส FileReader และ FileWriter
ซึง่ อยูในแพ็
คแกจ java.io.Reader และ
่
java.io.Writer ตำมลำดับ
ข้อมูลในไฟลจะถู
กจัดเก็บเป็ นกลุมตั
์
่ วอักขระ
(Text File) ซึง่ สำมำรถอำนเข
ำใจได
่
้
้
8


จะใช้งำนคลำส File รวมกั
บคลำส FileWriter ในกำร
่
เขียนขอมู
้ ลลงไฟล ์
ใช้เมธอด write() ของคลำส FileWriter มีรูปแบบ ดังนี้
File filename = new File(“path”);
FileWriter fOutput = new FileWriter(filename, append);
fOutput.write(data);
หรือ
FileWriter fOutput = new FileWriter(path, append);
fOutput.write(data);
โดยที่ path
เป็ นชือ
่ และตำแหน่งทีอ
่ ยูของไฟล
่
์
filename
เป็ นออบเจ็กตที
่ รำงจำกคลำส
File
้
์ ส
fOutput
เป็ นออบเจ็กตที
่ รำงจำกคลำส
้
์ ส
FileWriter
9


จะใช้งำนคลำส File รวมกั
บคลำส FileReader ใน
่
กำรอำนข
อมู
่
้ ลจำกไฟล ์
ใช้เมธอด read() ของคลำส FileReader และจะคืน
คำเป็
่ สิ้ นสุดกำรอำนข
อมู
่ นเลขจำนวนเต็ม -1 เมือ
่
้ ลจำก
ไฟล ์ มีรูปแบบ ดังนี้
File filename = new File(“path”);
FileReader fInput = new FileReader (filename);
data = fInput.read();
หรือ
FileReader fOutput = new FileReader (path);
data = fOutput.read();
โดยที่
path
เป็ นชือ
่ และตำแหน่งทีอ
่ ยูของไฟล
่
์
filename
เป็ นออบเจ็กตที
่ รำงจำกคลำส
File
้
์ ส
10

CharTest
ผลทีไ่ ดจำกกำรใช
้
้เมธอด
print() จะเป็ นคำตั
่ วเลขรหัส
แอสกีข
้ องตัวอักขระ และ
สำมำรถใช้เมธอด write()
แสดงผลข้อมูลเป็ นตัวอักขระได้
11



Buffer Stream เป็ นทีพ
่ ก
ั ในหน่วยควำมจำในกำรรับส่งขอมู
้ ลผำน
่
buffer ซึง่ เป็ นกำรนำขอมู
่ อง
กำรอำนหรื
อเขียนลงไฟลไปเก็
บ
้ ลทีต
้
่
์
ไว้ในหน่วยควำมจำกอน
เพือ
่ ช่วยเพิม
่ ประสิ ทธิภำพให้โปรแกรม
่
มำกขึน
้ ทำงำนเร็วขึน
้
คลำส Buffer ของ Byte Stream คือคลำส
BufferedInputStream และ BufferedOutputStream ส่วนคลำส
Buffer ของ Character Stream คือคลำส BufferedReader
และ BufferedWriter
กำรใช้งำนคลำส buffer จะต้องสรำงออบเจ็
กตเพื
่ เชือ
่ มตอ
้
่
์ อ
ออบเจ็กตของคลำส
FileInputStream กับ FileOutputStream
์
หรือ FileReader กับ FileWriter
12

มีรูปแบบกำรใช้งำนคลำส BufferedOutputStream
สำหรับเขียนขอมู
้ ลแบบ
Byte Stream ดังนี้
File filename = new File(Path);
FileOutputStream f_out = new FileOutputStream(filename);
BufferedOutputStream b_out = new
BufferedOutputStream(f_out);
b_out.write(data);
โดยที่
path
เป็ นชือ
่ และตำแหน่งทีอ
่ ยูของไฟล
่
์
filename
เป็ นออบเจ็กตที
่ รำงจำกคลำส
File
้
์ ส
f_out
เป็ นออบเจ็กตที
่ รำงจำกคลำส
้
์ ส
FileOutputStream
b_out
เป็ นออบเจ็กตที
่ รำงจำกคลำส
้
์ ส
13

มีรูปแบบกำรใช้งำนคลำส BufferedInputStream
สำหรับอำนข
่
้อมูลแบบ Byte Stream ดังนี้
File filename = new File(Path);
FileInputStream f_in = new FileInputStream(filename);
BufferedInputStream b_in = new BufferedInputStream(f_in);
data = b_in.read();
โดยที่
path
เป็ นชือ
่ และตำแหน่งทีอ
่ ยูของไฟล
่
์
filename
เป็ นออบเจ็กตที
่ รำงจำกคลำส
File
้
์ ส
f_in
เป็ นออบเจ็กตที
่ รำงจำกคลำส
้
์ ส
FileOutputStream
b_in
เป็ นออบเจ็กตที
่ รำงจำกคลำส
้
์ ส
BufferedOutputStream
data
เป็ นข้อมูลทีอ
่ ำนได
จำกไฟล
่
้
์
14

ByteBuffTest
15

มีรูปแบบกำรใช้งำนคลำส BufferedWriter สำหรับเขียน
ข้อมูลแบบ Chacracter Stream ดังนี้
File filename = new File(Path);
FileWriter f_write = new FileWriter(filename);
BufferedWriter b_write = new BufferedWriter(f_write);
b_write.write(data);
โดยที่
path
เป็ นชือ
่ และตำแหน่งทีอ
่ ยูของไฟล
่
์
filename
เป็ นออบเจ็กตที
่ รำงจำกคลำส
File
้
์ ส
f_write
เป็ นออบเจ็กตที
่ รำงจำกคลำส
FileWriter
้
์ ส
b_write
เป็ นออบเจ็กตที
่ รำงจำกคลำส
้
์ ส
BufferedWriter
data
เป็ นข้อมูลทีต
่ องกำรเขี
ยนลงไฟล ์
้
16

มีรูปแบบกำรใช้งำนคลำส BufferedReader สำหรับอำน
่
ข้อมูลแบบ Chacracter Stream มีดงั นี้
File filename = new File(Path);
FileReader f_ read= new FileReader(filename);
BufferedReader b_read = new BufferedReader(f_read);
data = b_read.readLine();
โดยที่
path
เป็ นชือ
่ และตำแหน่งทีอ
่ ยูของไฟล
่
์
filename
เป็ นออบเจ็กตที
่ รำงจำกคลำส
File
้
์ ส
f_read
เป็ นออบเจ็กตที
่ รำงจำกคลำส
FileReader
้
์ ส
b_read
เป็ นออบเจ็กตที
่ รำงจำกคลำส
้
์ ส
BufferedReader
data
เป็ นข้อมูลทีอ
่ ำนได
จำกไฟล
่
้
์
17

CharBuffTest
18

CharSkipTest
19

ใช้เมธอด print() และ println() ซึ่งมีกำรโอเวอรโหลด
์
ให้รับคำข
้ ฐำนไดทั
่ อมู
้ ลทีเ่ ป็ นชนิดพืน
้ ง้ หมด มีรูปแบบ
กำรใช้งำนคลำส PrintWriter ดังนี้
File filename = new File(path);
FileWriter f_write = new FileWriter(filename);
BufferedWriter b_write = new BufferedWriter(f_write);
PrintWriter p_write = new PrintWriter(b_write);
p_write.printIn(data);
โดยที่
path
เป็ นชือ
่ และตำแหน่งทีอ
่ ยูของไฟล
่
์
filename
เป็ นออบเจ็กตที
่ รำงจำกคลำส
File
้
์ ส
f_write
เป็ นออบเจ็กตที
่ รำงจำกคลำส
FileWriter
้
์ ส
b_write
เป็ นออบเจ็กตที
่ รำงจำกคลำส
้
์ ส
BufferedWriter
20


กำรจัดเก็บขอมู
่ ระกอบดวยชนิ
ดขอมู
น
้ ลทีป
้
้ ลแตกตำงกั
่
ควรใช้กำรอำนและเขี
ยนขอมู
Binary
่
้ ลลงไฟลประเภท
์
File แตถ
Character Stream ก็
่ ้ำต้องกำรทำดวย
้
สำมำรถทำไดโดยกำรคั
น
่ ขอมู
ดทีจ
่ ะเขียนลง
้
้ ลแตละชนิ
่
ไฟลด
“\t”
้
์ วย
CharWriteTest เขียนขอมู
้ ลลงไฟล ์ CharScore.txt
21

CharReadTest
22

มีรูปแบบกำรใช้งำนคลำส DataOutputStream ดังนี้
File filename = new File(path);
FileOutputStream f_out = new FileOutputStream(filename);
BufferedOutputStream b_out = new
BufferedOutputStream(f_out);
DataOutputStream d_out = new DataOutputStream(b_out);
d_out.methodName(data);
โดยที่
path
เป็ นชือ
่ และตำแหน่งทีอ
่ ยูของไฟล
่
์
filename
เป็ นออบเจ็กตที
่ รำงจำกคลำส
File
้
์ ส
f_out
เป็ นออบเจ็กตที
่ รำงจำกคลำส
้
์ ส
FileOutputStream
b_out
เป็ นออบเจ็กตที
่ รำงจำกคลำส
้
์ ส
BufferedOutputStream
23
d_out
เป็ นออบเจ็กตที
่ รำงจำกคลำส
้
์ ส
File filename = new File(Path);
FileInputStream f_in = new FileInputStream(filename);
BufferedInputStream b_in = new BufferedInputStream(f_in);
DataInputStream d_in = new DataInputStream(b_in);
data = d_in.methodName();
โดยที่
path
เป็ นชือ
่ และตำแหน่งทีอ
่ ยูของไฟล
่
์
filename เป็ นออบเจ็กตที
่ รำงจำกคลำส
File
้
์ ส
f_in
เป็ นออบเจ็กตที
่ รำงจำกคลำส
้
์ ส
FileInputStream
b_in
เป็ นออบเจ็กตที
่ รำงจำกคลำส
้
์ ส
BufferedInputStream
d_in
เป็ นออบเจ็กตที
่ รำงจำกคลำส
้
์ ส
24
DataInputStream
ชือ
่ เมธอด
readBoolean()
readByte()
readUnsigned
Byte()
readInt()
readShort()
readUnsigned
Short()
readLong()
readFloat()
readDouble()
readChar()
คำอธิบำย
อำนค
ำข
่
่ อมู
้ ลชนิด boolean
อำนค
ำข
่
่ อมู
้ ลชนิด byte
อำนค
ำข
่
่ อมู
้ ลชนิด byte แบบ unsigned
(ไมมี
่ คำติ
่ ดลบ)
อำนค
ำข
่
่ อมู
้ ลชนิด int
อำนค
ำข
่
่ อมู
้ ลชนิด short
อำนค
ำข
่
่ อมู
้ ลชนิด short แบบ
unsigned (ไมมี
่ คำติ
่ ดลบ)
อำนค
ำข
่
่ อมู
้ ลชนิด long
อำนค
ำข
่
่ อมู
้ ลชนิด float
อำนค
ำข
่
่ อมู
้ ลชนิด double
อำนค
ำข
่
่ อมู
้ ลชนิด char
อำนค
ำข
ป
่
่ อมู
้ ลชนิด String จำกไฟลในรู
์
25
ชือ
่ เมธอด
writeBoolean(boolea
n)
writeByte(int)
writeInt(int)
writeShort(int)
writeLong(long)
writeFloat(float)
writeDouble(double)
writeChar(int)
คำอธิบำย
เขียนขอมู
้ ลชนิด boolean (1 byte) ลงในไฟล ์
เขียนขอมู
่ ่ งมำ)
้ ลชนิด byte (1 byte ของ int ทีส
ลงในไฟล ์
เขียนขอมู
้ ลชนิด int (4 byte) ลงในไฟล ์
เขียนขอมู
้ ลชนิด short (ข้อมูล 2 byte ) ลงในไฟล ์
เขียนขอมู
้ ลชนิด long (ข้อมูล 8 byte) ลงในไฟล ์
เขียนขอมู
่ ่ง
้ ลชนิด float ลงในไฟล ์ โดย float ทีส
มำจะถูกแปลงไปเป็ น int ดวยเมธอด
floatToIntBits
้
ของคลำส Float
เขียนขอมู
้ ลชนิด double ลงในไฟล ์ โดย double
ทีส
่ ่ งมำจะถูกแปลงไปเป็ น long ดวยเมธอด
้
doubleToLongBits ของคลำส Double
เขียนขอมู
้ ลชนิด int (หมำยถึงเขียนขอมู
้ ลชนิด 2byte) ลงในไฟล ์
เขียนขอมู
้ ลชนิด String ลงในไฟล ์ ในรูปของ
26

ByteDataOutputTest
27
เมือ
่ เปรียบเทียบกับกำรจัดกำรขอมู
้ ลแบบ
Character Stream ดวยคลำส
้
 ByteDataInputTest
PrintWriter และ FileReader พบวำ่
• กำรใช้งำนคลำส PrintWriter และ
FileReader จะมีขน
้ั ตอนทีย
่ งยำกกว
ุ่
ำ่
เนื่องจำกเป็ นกำรเขียนเขียนข้อมูลลงไฟลที
์
ละบรรทัด และในกรณีทม
ี่ ข
ี อมู
้ ลมำกกวำ่
1 คำ่ จะต้องใช้เครือ
่ งหมำย “\t” คัน
่
ระหวำงข
อมู
่ อำนข
อมู
่
้ ล เมือ
่
้ ลก็จะต้องแยก
ข้อมูลดวยเครื
อ
่ งหมำย “\t” เช่นกันจึงเป็ น
้
กำรจัดกำรทีย
่ งยำก
ุ่
• กำรจัดกำรขอมู
้ ลแบบ Character
Stream จึงเหมำะกับขอมู
้ ลทีเ่ ป็ นข้อควำม
ส่วนกำรจัดกำรแบบ Byte Stream เหมำะ
กับข้อมูลชนิดพืน
้ ฐำนทีแ
่ ตกตำงกั
น
28
่

File อยูในแพ็
คแกจ java.io จะประกอบดวยเมธอดที
ช
่ ่ วย
่
้
ในกำรทำงำนกับ file
หรือ directory เช่น absolute path, last modify หรือ
ขนำดของไฟล ์ เป็ นต้น
มีรูปแบบกำรใช้งำนคลำส File ดังนี้
File filename = new File(Path);
โดยที่
path
เป็ นชือ
่ และตำแหน่งทีอ
่ ยูของไฟล
่
์
filename เป็ นออบเจ็กตที
่ รำงจำกคลำส
File
้
์ ส
29
ชือ
่ เมธอด
canRead()
canWrite()
delete()
exist()
getName()
getParent()
getPath()
isDirectory()
isFile()
length( )
mkdir
คำอธิบำย
ตรวจสอบคุณสมบัตข
ิ องไฟลว์ ำสำมำรถถู
กนำไปเปิ ด
่
อำนได
หรื
่
้ อไม่
ตรวจสอบคุณสมบัตข
ิ องไฟลว์ ำสำมำรถถู
กนำไปเปิ ด
่
เขียนไดหรื
้ อไม่
ลบไฟล ์ โดยคืนคำเป็
่ ไฟลนั
่ นจริงเมือ
์ ้นมีอยูจริ
่ งและ
สำมำรถลบไดส
้ ำเร็จ
ตรวจสอบวำไฟล
ดั
อยูหรื
่
์ งกลำวมี
่
่ อไม่
ให้คำเป็
่ ไฟล ์
่ นชือ
ให้คำเป็
่ นพำธหรือไดเร็คทอรีของไดเร็คทอรีทเี่ ก็บ
ไฟล ์
ให้คำเป็
่ นพำธหรือไดเร็คทอรีของไฟล ์
ตรวจสอบออบเจ็กตว์ ำเป็
่ นไดเร็คทอรีหรือไม่
ตรวจสอบออบเจ็กตว์ ำเป็
่ นไฟลหรื
์ อไม่
ให้คำเป็
่ นขนำดของไฟล ์ ซึ่งมีหน่วยเป็ นไบต ์
ใช้สร้ำงไดเร็คทอรี พร้อมกับคืนคำเป็
่
่ นจริงเมือ
สำมำรถสร้ำงไดส
้ ำเร็จ
30

FileMethod
31