สมัครเรียนโทร. 085-350-7540 , 084-88-00-255 , ntprintf@gmail.com

Tutorial JAVA

01 install Eclipse 02 intro to programming Eclipse 03 condition 04.loop 05.array 05 2 array cont 06 01 function 06 02 function cont 07 object 08 string 09 constructor 10 01 oop 10 02 oop2 11 exception 12 reading file 13 thread 14 generic 15 01 GUI 15 02 GUI2 15 03.GUI3 16 using WindowBuilder 17 event 18 database management system 19 ER diagram 20 Relational 21 Xampp 22 JDBC 23 MVC 24 SQL

การอ่านเขียนแฟ้มข้อมูล Stream I/O

            I/O คือเรื่องเกี่ยวกับการอ่านและเขียนข้อมูล รวมถึงการอ่านและเขียนข้อมูลลงบนไฟล์ ในหัวนี้จะอธิบายถึงการเขียนแบบตัวอักษรและสตริงเท่านั้น ไม่ได้รวมถึงการเขียนแบบไบต์ อย่างไรก็ตามจะเห็นได้ว่าการอ่านเขียนข้อมูลพวกนี้แทบจะไม่ได้เห็นในการเขียนโปรแกรมด้วยจาวาช่วงแรกๆเพราะจริงคือจาวาโดดเด่นเรื่องการเป็นโปรแกรมกราฟฟิค (graphically oriented programs) ไม่ใช่โปรแกรมตัวหนังสือ (text-based programs)

สตรีม

            ท่อต่อสำหรับส่งและรับข้อมูล เหมือนจะส่งน้ำก็ต้องต่อท่อที่ส่งกับที่รับน้ำ(น้ำเป็นข้อมูล) สตรีมสามารถเอาไปต่อกับอะไรก็ได้ เช่น ขาเข้า(เข้ามาหาเรา)ก็เอาไปต่อกับ ดิสก์ ไฟล์ คีย์บอร์ดและซ็อกเก็ต(network socket) ก็ได้ เพื่อดูดข้อมูลจากแหล่งที่ไปต่อมาใช้งาน ส่วนขาออก(ออกไปที่ๆอยากจะส่งไป) ก็ไปต่อกับ console ดิสก์ ไฟล์ ซ็อกเก็ต ก็ได้

 


รูป 12-1

            ท่อข้างบนเป็นท่อขาเข้าใช้สำหรับอ่านข้อมูล ส่วนท่อข้างล่างเป้นท่อขาออกสำหรับการเขียนข้อมูลออกไปข้างนอก

 

เรื่องทั่วไปของ System

            System เป็นคลาสหนึ่งของจาวาที่ใช้กันบ่อยๆก่อนหน้านี้สำหรับการรับข้อมูลเข้าทางแป้นพิมพ์จาก System.in และการให้โปรแกรมแสดงผลลัพธ์ออกทาง console ด้วย System.out.println ใน System มีตัวแปร in, out ที่ประกาศเป็น public static ดังนั้นจึงสามารถใช้งานได้เลย

            System.in เป็นอินพุตแบบมาตรฐาน โดยที่ System.in เป็นอ็อปเจ็คของ InputStream ส่วน System.out ก็เป็นเอาท์พุตแบบมาตรฐาน  เป็นอ็อปเจ็คชนิด PrintStream

การอ่านข้อมูล

            การอ่านข้อมูลสามารถทำได้ด้วยบัฟเฟอร์ดสตรีม (Buffered Stream) การอ่านเขียนข้อมูลแบบมีบัฟเฟอร์ดก็จะทำให้ประสิทธิภาพการรับส่งข้อมูลดีขึ้นกว่าไม่มี(แบบไม่มีคือใช้ Scanner แทนได้)

            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

นี่คือการเขียนบัฟเฟอร์ดเพื่อรับข้อมูลเข้าจากแป้นพิมพ์ เนื่องจากReader เป็น abstract ส่วน InputStream ไม่ได้เป็น abstract ก็เลยต้องเอา InputStream ที่เป็นคลาสลูกมาช่วยดูดข้อมูล และ System.in ก็เป็นอ็อปเจ็คของ InputStream สตรีมอีก ก็ให้เอาอ็อปเจ็บที่รับมาจากแป้นพิมพ์มาให้ InputStream หลังจากนั้นก็เก็บไว้ในตัวแปร br ของ BufferedReader

อ่าน character

Charactor คือตัวอักษรตัวเดียว ให้ใช้เมท็อด read() มาช่วยในการเก็บตัวอักษร โดย read() โยน IOException เพื่อป้องกันความผิดพลาด

int read()throws IOException

 


รูป12-2

บรรทัดที่ 3 : อิมพอร์ท java.io.*; แทนได้

บรรทัดที่ 9 : อย่าลืม throws IOException

บรรทัดที่ 12 : รับข้อมูลจากแป้นพิมพืมาใส่บัฟเฟอร์ด

บรรทัดที่ 17: ภายในลูป while ให้รับข้อมูลจนกระทั่งถ้าเป็น e ให้หยุดรับข้อมูลโดยรับข้อมูลโดย read()

 


รูป12-3

อ่านสตริง

คล้ายกับการรับข้อมูลตัวอักษรแต่เปลี่ยนเมท็อดที่ใช้เป็น readLine();

String readLine() throws IOException

 


รูป12-4

การเขียนข้อมูล

การเขียนข้อมูลหรือการส่งข้อมูลออกสามารถทำได้โดยใช้เมท็อด void write() สำหรับการเขียนข้อมูลตัวอักษรและ byte

นอกจากนี้ยังมีคลาส PrinWriter  ซึ่งก็ทำงานเหมือนๆกับ print กับ println  เขียนได้แบบนี้

PrinWriter pw = new PrinWriter(ตัวแปร.getOutputStream)

 

การอ่านและเขียนไฟล์

            หัวข้อนี้เป็นเรื่องการเขียนและอ่านแฟ้มโดยเป็นแฟ้มแบบสตริงที่เปิดอ่านด้วยNotepad ได้ ซึ่งการเขียนและอ่านไฟล์สามารถใช้ Scanner และ PrintStream ร่วมกันก็ได้หรือจะใช้

FileInputStream(String fileName) throws FileNotFoundException

FileOutputStream(String fileName) throws FileNotFoundException

และเมท็อดที่ใช้ได้ดังนี้

void close() throws IOException

int read()throws IOException

void write()throws IOException

ตัวอย่างเช่น

 


รูป 12-5

            โปรแกรมตัดเกรดจากไฟล์แล้วเซฟลงอีกไฟล์

บรรทัดที่ 10 : โปรแกรมนี้ใช้ Scanner ในการรับข้อมูล โดยมีการ new อ็อปเจ็คของไฟล์ขึ้นมาให้อ็อปเจ็คนี้ไป

เก็บข้อมูลจากพาธ(path) ตามในรูปก็คือ มีไฟล์ชื่อ score.txt ใน local disk e

 


รูป12-6

บรรทัดที่ 11 : ใช้คำสั่ง PrintStream สำหรับการเขียนข้อมูลออกไปเก็บโดยสร้างไฟล์ใหม่ขึ้นมาชื่อ grade.txt

สำหรับเก็บผลของการตัดเกรด

บรรทัดที่ 13 : ใช้เงื่อนไข while(sc.hasnext()) สำหรับการตรวจสอบว่ายังมีข้อมูลอยู่ในไฟล์หรือไม่ ถ้ามีจะคืน

ค่าจริงและทำงานต่อจนกว่าจะไม่มีข้อมูลในไฟล์ก็จะคืนค่าเท็จและออกจากลูป

บรรทัดที่ 15 : ให้เก็บข้อมูลจากอ็อปเจ็ค sc ด้วย nextLine() เพื่อเก็บข้อมูลแต่ละบรรทัดลงใน ตัวแปร person

คือเก็บข้อมูลของแต่ละคนไว้ หลังจากนั้น บรรทัดที่ 16 : ให้ใช้ trim() เพื่อตัดช่องว่างหน้าหลังออก

บรรทัดที่ 17 : ใช้ indexOf เพื่อหาช่องว่างจากตำแหน่งที่ 0 นี่เป็นเหตุผลว่าทำไมต้องใช้ trim() ก่อนเพราะ

ช่องว่างที่เราต้องการอยู่ตรงกลางเท่านั้น ต้องมั่นใจว่าจะไม่มีช่องว่างที่อื่นก่อนหน้าช่องวางตรงกลาง ดูจากรูป 12-6

บรรทัดที่ 20 : ตัด substring ก่อนช่องว่างเก็บเป็น id

บรรทัดที่ 21 : ตัด substring ครึ่งหลังเก็บเป็น คะแนน

บรรทัดที่ 22 : เอาสตริงคะแนนมาเปลี่ยนเป็น double

บรรทัดที่ 30 : ให้อ็อปเจ็คเรียก println เพื่อเก้บข้อมูลสำหรับส่งออก

บรรทัดที่ 33 : close(); ไฟล์เพื่อเซฟข้อมูลให้เรียบร้อย

ผลลัพธ์ที่ได้

ได้ไฟล์ใหม่ที่ตัดเกรดเรียบร้อยแล้ว

 


รูป 12-7



บทความนี้อาจจะมีที่ผิด กรุณาตรวจสอบก่อนใช้

หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor

ไม่อยากอ่าน Tutorial อยากมาเรียนเลยทำอย่างไร?

สมัครเรียน ONLINE ได้ทันทีที่ https://elearn.expert-programming-tutor.com

หรือติดต่อ

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM

แผนที่ ที่ตั้งของอาคารของเรา

C Article


C++ Article


Java Article


C#.NET Article


VB.NET Article


Python Article


Golang Article


JavaScript Article


Perl Article


Lua Article


Rust Article


Article


Python


Python Numpy


Python Machine Learning



แผนผังการเรียนเขียนโปรแกรม

Link อื่นๆ

Allow sites to save and read cookie data.
Cookies are small pieces of data created by sites you visit. They make your online experience easier by saving browsing information. We use cookies to improve your experience on our website. By browsing this website, you agree to our use of cookies.

Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com

ติดต่อเราได้ที่

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
แผนที่ ที่ตั้งของอาคารของเรา