"เราจะเริ่มด้วยสตรีมสำหรับอินพุต/เอาต์พุตไฟล์ แต่ก่อนอื่นต้องมาก่อน"

มีสองคลาสสำหรับการอ่านและเขียนไฟล์ : FileInputStreamและFileOutputStream ดังที่คุณอาจเดาได้อยู่แล้วว่าFileInputStreamสามารถอ่านไบต์ตามลำดับจากไฟล์ และFileOutputStreamสามารถเขียนไบต์ตามลำดับไปยังไฟล์ได้ นี่คือวิธีการที่คลาสเหล่านี้มี:

วิธี วิธีการทำอะไร
FileInputStream(String fileName);
— นี่คือตัวสร้าง ช่วยให้คุณระบุชื่อไฟล์บนดิสก์ ซึ่งวัตถุที่สร้างขึ้นจะอ่านข้อมูล
int read();
— วิธีนี้อ่านหนึ่งไบต์จากไฟล์และส่งกลับ ค่าที่ส่งคืนถูกขยายเป็น int
int available();
— วิธีนี้จะส่งคืนจำนวนไบต์ที่ยังไม่ได้อ่าน (มี)
void close();
— วิธีนี้ «ปิด» สตรีม คุณเรียกสิ่งนี้เมื่อคุณทำงานกับสตรีมเสร็จแล้ว
จากนั้นวัตถุจะดำเนินการทำความสะอาดที่จำเป็นในการปิดไฟล์ ฯลฯ
ณ จุดนี้ คุณจะไม่สามารถอ่านข้อมูลใด ๆ จากสตรีมได้อีก

เพื่อความสนุก ลองคำนวณผลรวมของไบต์ทั้งหมดในไฟล์กัน นี่คือลักษณะของรหัส:

รวมไบต์ทั้งหมดในไฟล์
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 ถูกจัดระเบียบอย่างไร"

"ตกลง ดูสิ่งนี้:"

วิธี วิธีการทำอะไร
FileOutputStream (String fileName);
"นี่คือตัวสร้าง ช่วยให้คุณระบุชื่อไฟล์บนดิสก์ ซึ่งวัตถุที่สร้างขึ้นจะเขียนข้อมูล"
void write(int data);
"เมธอดนี้เขียนไบต์ถัดไป ตัดทอนข้อมูลเหลือหนึ่งไบต์"
void flush();
"ข้อมูลที่จะเขียนมักจะถูกรวบรวมเป็นบล็อกขนาดใหญ่ในหน่วยความจำก่อน แล้วจึงเขียนลงดิสก์เท่านั้น"

คำสั่ง flush บังคับให้ข้อมูลที่ยังไม่ได้บันทึกทั้งหมดถูกเขียนลงดิสก์

void close();
"วิธีนี้ «ปิด» สตรีม คุณจะเรียกใช้วิธีนี้เมื่อคุณทำงานกับสตรีมเสร็จแล้ว"
จากนั้นวัตถุจะดำเนินการทำความสะอาดที่จำเป็นในการปิดไฟล์ ฯลฯ

คุณไม่สามารถเขียนข้อมูลลงในสตรีมได้อีกต่อไป และการล้างข้อมูลจะถูกเรียกโดยอัตโนมัติ

"แค่นั้นแหละ?"

"ใช่ มีวิธีเดียวในการเขียน: เขียน() มันเขียนได้ครั้งละหนึ่งไบต์เท่านั้น แต่มันให้คุณเขียนข้อมูลได้มากเท่าที่คุณต้องการลงในไฟล์"

การเขียนโปรแกรมเป็นกระบวนการของการแบ่งงานขนาดใหญ่และซับซ้อนออกเป็นงานย่อยๆ โดยพื้นฐานแล้วกระบวนการเดียวกันนี้เกิดขึ้นที่นี่: การอ่านและเขียนบล็อกข้อมูลขนาดใหญ่จะแบ่งออกเป็นการอ่านและเขียนเป็นชิ้นขนาดพอดีคำ ครั้งละหนึ่งไบต์

ต่อไปนี้คือวิธีที่คุณสามารถใช้คลาสเหล่านี้เพื่อคัดลอกไฟล์ลงในดิสก์:

คัดลอกไฟล์บนดิสก์
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 ในที่สุดฉันก็เข้าใจว่าโค้ดนี้ทำงานอย่างไร"