"เราจะเริ่มด้วยสตรีมสำหรับอินพุต/เอาต์พุตไฟล์ แต่ก่อนอื่นต้องมาก่อน"
มีสองคลาสสำหรับการอ่านและเขียนไฟล์ : FileInputStreamและFileOutputStream ดังที่คุณอาจเดาได้อยู่แล้วว่าFileInputStreamสามารถอ่านไบต์ตามลำดับจากไฟล์ และFileOutputStreamสามารถเขียนไบต์ตามลำดับไปยังไฟล์ได้ นี่คือวิธีการที่คลาสเหล่านี้มี:
วิธี | วิธีการทำอะไร |
---|---|
|
— นี่คือตัวสร้าง ช่วยให้คุณระบุชื่อไฟล์บนดิสก์ ซึ่งวัตถุที่สร้างขึ้นจะอ่านข้อมูล |
|
— วิธีนี้อ่านหนึ่งไบต์จากไฟล์และส่งกลับ ค่าที่ส่งคืนถูกขยายเป็น int |
|
— วิธีนี้จะส่งคืนจำนวนไบต์ที่ยังไม่ได้อ่าน (มี) |
|
— วิธีนี้ «ปิด» สตรีม คุณเรียกสิ่งนี้เมื่อคุณทำงานกับสตรีมเสร็จแล้ว จากนั้นวัตถุจะดำเนินการทำความสะอาดที่จำเป็นในการปิดไฟล์ ฯลฯ ณ จุดนี้ คุณจะไม่สามารถอ่านข้อมูลใด ๆ จากสตรีมได้อีก |
เพื่อความสนุก ลองคำนวณผลรวมของไบต์ทั้งหมดในไฟล์กัน นี่คือลักษณะของรหัส:
public static void main(String[] args) throws Exception
{
//Create a FileInputStream object bound to «c:/data.txt».
FileInputStream inputStream = new FileInputStream("c:/data.txt");
long sum = 0;
while (inputStream.available() > 0) //as long as there are unread bytes
{
int data = inputStream.read(); //Read the next byte
sum += data; //Add it to the running total
}
inputStream.close(); // Close the stream
System.out.println(sum); // Display the sum on the screen.
}
"เราได้ตรวจสอบสิ่งนี้แล้ว FileOutputStream ถูกจัดระเบียบอย่างไร"
"ตกลง ดูสิ่งนี้:"
วิธี | วิธีการทำอะไร |
---|---|
|
"นี่คือตัวสร้าง ช่วยให้คุณระบุชื่อไฟล์บนดิสก์ ซึ่งวัตถุที่สร้างขึ้นจะเขียนข้อมูล" |
|
"เมธอดนี้เขียนไบต์ถัดไป ตัดทอนข้อมูลเหลือหนึ่งไบต์" |
|
"ข้อมูลที่จะเขียนมักจะถูกรวบรวมเป็นบล็อกขนาดใหญ่ในหน่วยความจำก่อน แล้วจึงเขียนลงดิสก์เท่านั้น"
คำสั่ง flush บังคับให้ข้อมูลที่ยังไม่ได้บันทึกทั้งหมดถูกเขียนลงดิสก์ |
|
"วิธีนี้ «ปิด» สตรีม คุณจะเรียกใช้วิธีนี้เมื่อคุณทำงานกับสตรีมเสร็จแล้ว" จากนั้นวัตถุจะดำเนินการทำความสะอาดที่จำเป็นในการปิดไฟล์ ฯลฯ |
คุณไม่สามารถเขียนข้อมูลลงในสตรีมได้อีกต่อไป และการล้างข้อมูลจะถูกเรียกโดยอัตโนมัติ
"แค่นั้นแหละ?"
"ใช่ มีวิธีเดียวในการเขียน: เขียน() มันเขียนได้ครั้งละหนึ่งไบต์เท่านั้น แต่มันให้คุณเขียนข้อมูลได้มากเท่าที่คุณต้องการลงในไฟล์"
การเขียนโปรแกรมเป็นกระบวนการของการแบ่งงานขนาดใหญ่และซับซ้อนออกเป็นงานย่อยๆ โดยพื้นฐานแล้วกระบวนการเดียวกันนี้เกิดขึ้นที่นี่: การอ่านและเขียนบล็อกข้อมูลขนาดใหญ่จะแบ่งออกเป็นการอ่านและเขียนเป็นชิ้นขนาดพอดีคำ ครั้งละหนึ่งไบต์
ต่อไปนี้คือวิธีที่คุณสามารถใช้คลาสเหล่านี้เพื่อคัดลอกไฟล์ลงในดิสก์:
public static void main(String[] args) throws Exception
{
//Create a stream to read bytes from a file
FileInputStream inputStream = new FileInputStream("c:/data.txt");
//Create a stream to write bytes to a file
FileOutputStream outputStream = new FileOutputStream("c:/result.txt");
while (inputStream.available() > 0) //as long as there are unread bytes
{
int data = inputStream.read(); // Read the next byte into the data variable
outputStream.write(data); // and write it to the second stream
}
inputStream.close(); //Close both streams. We don't need them any more.
outputStream.close();
}
"ขอบคุณ Rishi ในที่สุดฉันก็เข้าใจว่าโค้ดนี้ทำงานอย่างไร"
GO TO FULL VERSION