SlideShare una empresa de Scribd logo
1 de 12
Descargar para leer sin conexión
File Operations - 06                                                Computer Programming using Java               65
   CHAPTER                                   การดําเนินการกับแฟมข้อมูล
                                                                 ้
      06                                          (File Operations)
1. ลักษณะทั่วไปของแฟมข้ อมล (Characteristic of File)
                    ้     ู
1. นิยามและข้ อมลเบืองต้ นของแฟมข้ อมล
                  ู ้               ้       ู
   1) แฟมข้ อมูล (File / Text File) คือ แฟมเอกสารหรื อไฟล์ที่มีรายการข้ อมูลอยู่ภายใน ซึงจะถูกจัดเก็บไว้ เป็ น
           ้                              ้                                             ่
       แฟมนามสกุลต่างๆ เช่น *.txt, *.dat หรื อ นามสกุลอื่นๆ ซึงแสดงไว้ ในตัวอย่างของแฟ้ มข้ อมูลต่อไปนี ้
         ้                                                       ่

                                                      แฟมข้ อมูลชื่อ "data.txt" สร้ างขึ ้นโดย
                                                        ้
                                                      โปรแกรม Notepad โดยแฟมนี ้มีนามสกุลเป็ น
                                                                             ้
                                                      *.txt ซึงภายในเก็บผลการเรี ยนของนิสต
                                                                ่                            ิ
                                                      กลุมหนึง
                                                          ่ ่


    2) ข้ อมูลที่จดเก็บในแฟมข้ อมูลสามารถมีได้ ไม่จํากัดจํานวนบรรทัด (ยาวกี่บรรทัดก็ได้ )
                  ั        ้
    3) ประเภทข้ อมูลที่เก็บอยูในแฟมข้ อมูลประกอบไปด้ วย ตัวเลข (จํานวนเต็ม และจํานวนจริง) และสตริง
                             ่ ้
    4) ขนาดของแฟ้ มข้ อมูลคํานวนได้ จากจํานวนของอักขระทุกตัวที่เก็บอยูในแฟมข้ อมูลนัน (1 อักขระ = 1 Byte)
                                                                        ่ ้               ้

2. การดําเนินการกับแฟมข้ อมล
                           ้    ู
   การดําเนินการกับแฟมข้ อมูล คือ การกระทําหรื อประมวลผลบางอย่างกับแฟมข้ อมูล ซึ่งในเอกสารบทนีจะ
                         ้                                                     ้                            ้
   นําเสนอ [1] การอ่านแฟ้ มข้ อมูล และ [2] การเขียนแฟ้ มข้ อมูล
   1) การอ่านแฟ้ มข้ อมูล (Reading File) คือ การรับค่าหรื อรับข้ อมูลจากแฟมข้ อมูลเข้ ามายังเครื่ องคอมพิวเตอร์
                                                                          ้
       เพื่อกระทําบางสิงบางอย่าง เช่น คํานวนผล แสดงผล เป็ นต้ น
                       ่
   2) การเขียนแฟ้ มข้ อมูล (Writing File) คือ การบันทึกค่าหรื อบันทึกข้ อมูลจากการประมวลผลบนเครื่ อง
       คอมพิวเตอร์ ไปเก็บไว้ ยงแฟมข้ อมูล
                              ั ้

2. การอ่ านและเขียนแฟมข้ อมล (Reading and Writing Files)
                     ้     ู
1. ขันตอนการอ่ านแฟมข้ อมล
     ้               ้    ู
   การอ่านแฟมข้ อมูลในภาษาจาวาสามารถทําได้ หลายวิธี แต่ในบทนี ้จะนําเสนอการอ่านแฟ้ มข้ อมูลด้ วยคลาส
            ้
   Scanner ซึงมีลกษณะการทํางานเช่นเดียวกับการอ่านข้ อมูลจากแปนพิมพ์ที่กล่าวไปแล้ วในบทที่ 2 โดยมีขน-
              ่ ั                                              ้                                  ั้
   ตอนต่างๆ ดังต่อไปนี ้
   1) การนําเข้ าคลาส Scanner และแพ็คเก็จ java.io ก่อนการเปิ ดอ่านแฟ้ มข้ อมูลจะต้ องนําเข้ าคลาส
       Scanner และแพ็คเก็จ java.io ก่อนเสมอ โดยใช้ คําสัง import java.util.Scanner; และคําสัง
                                                        ่                                            ่
       import java.io.*; ซึงระบุไว้ ก่อนเขียนหัวคลาส ดังตัวอย่าง
                             ่
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                            ้
66     Computer Programming using Java                                                                    06 - File Operations


              1    import java.util.Scanner;                            การ import สองคําสังนี ้ จะให้ คําสังใด
                                                                                                    ่            ่
              2    import java.io.*;
              3    public class Test {                                  ขึ ้นก่อนก็ได้ แต่ต้องมีให้ ครบทัง้ 2 คําสัง
                                                                                                                   ่
              4      ...
              5    }


         2) การตรวจสอบความผิดพลาดในการเปิ ดอ่ านแฟมข้ อมล เมท็อดใดก็ตามที่เป็ นเมท็อดสําหรับเปิ ดอ่าน
                                                               ้     ู
            แฟมข้ อมูล (ในที่นี ้คือเมท็อด main) จะต้ องมีการระบุสวนของคําสัง throws IOException ไว้ ตอนท้ าย
              ้                                                   ่         ่
            ของหัวเมท็อดนันเสมอ เพื่อให้ ระบบตรวจสอบข้ อผิดพลาด เช่น ตรวจสอบว่าแฟมข้ อมูลที่เปิ ดอ่านมีอยู่จริ ง
                           ้                                                         ้
            ในระบบหรื อไม่ เป็ นต้ น ดังตัวอย่าง
              1    import java.util.Scanner;
              2    import java.io.*;            คําว่า throws ต้ องเติม s ด้ วย
              3    public class Test {
              4      public static void main(String[] args) throws IOException {
              5        ...
              6      }
              7    }


         3) การสร้ างตัวอ่ านจากแฟมข้ อมล เป็ นการกําหนดชื่อตัวอ่านเพื่อใช้ สําหรับอ่านค่าข้ อมูลต่างๆ จาก
                                     ้       ู
            แฟมข้ อมูล โดยจะสร้ างเพียงครังเดียวเท่านัน และจะใช้ งานตัวอ่านนันตลอดทังโปรแกรม ซึงมีคําสังดังนี ้
              ้                           ้           ้                      ้      ้          ่       ่
              Scanner <ชื่อตัวอ่าน> = new Scanner(new File("<ชื่อแฟมข้ อมูล>"));
                                                                   ้                                                   หรื อ

              File <ชื่อตัวเรี ยกแฟมข้ อมูล> = new File("<ชื่อแฟมข้ อมูล>")
                                   ้                            ้
              Scanner <ชื่อตัวอ่าน> = new Scanner(<ชื่อตัวเรี ยกแฟมข้ อมูล>);
                                                                  ้

              1    import java.util.Scanner;
              2    import java.io.*;                         เปิ ดอ่านแฟมข้ อมูลที่ชื่อ data.txt
                                                                         ้
              3    public class Test {
              4      public static void main(String[] args) throws IOException {
              5        Scanner in = new Scanner(new File("data.txt"));
              6        ...
              7      }           ตัวอ่านแฟมข้ อมูลชื่อว่า in
                                          ้                       เข้ ามาแทนที่คําสัง System.in
                                                                                    ่
              8    }
                                                                                         เดิม ซึงจะหมายถึงแฟมข้ อมูล
                                                                                                ่           ้

         4) การตรวจสอบว่ ายังมีข้อมลเหลือให้ อ่านในแฟมข้ อมลอีกหรือไม่ เมื่อประกาศและสร้ างทุกอย่างตาม
                                        ู                     ้       ู
            ขันตอนที่ 1-3 แล้ ว ขันตอนแรกที่จะเริ่ มอ่านข้ อมูลตังแต่ต้นแฟมจนถึงท้ ายแฟ้ มนัน จะต้ องตรวจสอบก่อน
              ้                   ้                                 ้     ้                 ้
            เสมอว่ายังมีข้อมูลในแฟมเหลือให้ อานอีกหรื อไม่ ซึงใช้ เมท็อด hasNext() ในการตรวจสอบ โดยคําตอบที่
                                    ้            ่                ่
            ได้ จะเป็ นค่าความจริง (Boolean) ซึงมีรูปแบบคําสังดังนี ้
                                               ่                ่
                                                                             ตรวจสอบว่ายังมีข้อมูลเหลือในแฟมอีกหรื อไม่ ถ้ า
                                                                                                               ้
              while(<ชื่อตัวอ่าน>.hasNext()) {
                                                                             ยังเหลือ (ยัง Next ได้ ) ก็จะวนอ่านข้ อมูลไปเรื่ อยๆ
                  ...
              }             คําสังอ่านค่าข้ อมูล (จะกล่าวในข้ อถัดไป)
                                 ่                                           จนกว่าไม่มีข้อมูลเหลือให้ อานได้ อีก ก็จบการวนซํ ้า
                                                                                                          ่

     © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                                 ้
File Operations - 06                                                 Computer Programming using Java                67
    5) การอ่ านค่ าข้ อมลด้ วยตัวอ่ านแฟมข้ อมล ตัวอ่านจากแฟ้ มข้ อมูลที่สร้ างขึ ้นสามารถอ่านค่าข้ อมูลประ-
                        ู               ้      ู
       เภทจํานวนเต็ม จํานวนจริ ง และสตริ ง โดยใช้ คําสังและเมท็อดต่อไปนี ้
                                                       ่
       (1) คําสังอ่านค่าจํานวนเต็มประเภท int โดยใช้ เมท็อด nextInt()
                ่
               int <ชื่อตัวแปร> = <ชื่อตัวอ่าน>.nextInt();                หลังชื่อเมท็อด nextInt()ต้ องตาม
                                                                          ด้ วยวงเล็บเสมอห้ ามลืมเด็ดขาด
            เช่น int num = in.nextInt();
        (2) คําสังอ่านค่าจํานวนจริ งประเภท double โดยใช้ เมท็อด nextDouble()
                 ่
               double <ชื่อตัวแปร> = <ชื่อตัวอ่าน>.nextDouble();


            เช่น double d = in.nextDouble();
        (3) คําสังอ่านค่าข้ อมูลประเภท String ทีละบรรทัด โดยใช้ เมท็อด nextLine()
                 ่
               String <ชื่อตัวแปร> = <ชื่อตัวอ่าน>.nextLine();


            เช่น String s1 = in.nextLine();
        (4) คําสังอ่านค่าข้ อมูลประเภท String ทีละคําหรื อทีละช่วง (แต่ละช่วงคันด้ วยช่องว่างหรื อ t หรื อ n)
                 ่                                                             ่
            โดยใช้ เมท็อด next()
               String <ชื่อตัวแปร> = <ชื่อตัวอ่าน>.next();


              เช่น   String s2 = in.next();


    6) การปิ ดแฟมข้ อมล เมื่ออ่านข้ อมูลเสร็ จสิ ้นเรี ยบร้ อยแล้ ว จะต้ องทําการปิ ดแฟมข้ อมูลที่อ่านนันเสมอ โดย
                  ้     ู                                                              ้                ้
       ใช้ เมท็อด close() ซึงมีรูปแบบคําสังดังต่อไปนี ้
                            ่             ่
         <ชื่อตัวอ่าน>.close();                      เช่น   in.close();



    7) ตัวอย่ างการเขียนโปรแกรมเปิ ดอ่ านแฟมข้ อมลแบบครบทุกขันตอน
                                           ้     ู           ้
         1      import java.util.Scanner;
         2      import java.io.*;                     ชื่อแฟมข้ อมูลนี ้เป็ นการเรี ยกชื่อแบบ Full Path
                                                            ้
         3      public class Test {
         4        public static void main(String[] args) throws IOException {
         5          Scanner in = new Scanner(new File("d:/cu/student.dat"));
         6          int i = 1;
         7          while(in.hasNext()) {                  เปิ ดอ่านแฟมข้ อมูลที่ชื่อ student.dat
                                                                      ้
         8            String s = in.nextLine();
         9            System.out.println(i + " : " + s);
         10           i++;
         11         }             หมายเลขบรรทัด   วนอ่านข้ อมูลทีละบรรทัดจากแฟมข้ อมูลแล้ วแสดง
                                                                                     ้
         12         in.close();
         13       }                               ผลลัพธ์ของแต่ละบรรทัดที่อานได้ ขึ ้นบนจอภาพ
                                                                                ่
         14     }                  ปิ ดแฟมข้ อมูล
                                         ้

© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                            ้
68     Computer Programming using Java                                                         06 - File Operations


     โจทย์ ข้อที่ 1 [ระดับง่ าย] จงแสดงผลลัพธ์ จากส่ วนของโปรแกรมต่ อไปนีตามคําสั่งที่ระบุ (12 คะแนน)
                                                                         ้
      1      Scanner in = new Scanner(new File("test.txt"));                               test.txt
      2      while (in.hasNext()) {
                                                                                   1       2        3
      3                                 ํ ่ั
               System.out.println( ระบุคาสง );                                     4
      4      }                                                                     5 6
      5      in.close();                                                           7.0     8    9D 0


            in.nextInt()            in.nextDouble()              in.nextLine()                  in.next()




          จํานวนรอบของ while       จํานวนรอบของ while         จํานวนรอบของ while          จํานวนรอบของ while




     โจทย์ ข้อที่ 2 [ระดับง่ าย] จงเขียนโปรแกรมภาษาจาวาที่สมบรณ์ เพื่ออ่ านแฟมข้ อมลที่ช่ ือ data.txt ซึ่ง
                                                               ู             ้     ู
     ภายในเก็บข้ อมลที่เป็ นข้ อความจํานวนหนึ่ งที่ไม่ ทราบจํานวนบรรทัดที่แน่ ชัด แล้ วทําการนั บจํานวน
                       ู
     บรรทัด (Number of Lines) ทังหมดที่ปรากฎอย่ ูในแฟมข้ อมลนัน พร้ อมทังแสดงผลลัพธ์ ท่ ีได้ ออกทาง
                                       ้                  ้      ู ้           ้
     จอภาพ (10 คะแนน)




     © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                                 ้
File Operations - 06                                               Computer Programming using Java              69
โจทย์ ข้อที่ 3 [ระดับง่ าย] จงเขียนโปรแกรมภาษาจาวาที่สมบรณ์ เพื่ออ่ านแฟมข้ อมลที่ช่ ือ data.txt ซึ่ง
                                                          ู             ้        ู
ภายในเก็บข้ อมลที่เป็ นข้ อความจํานวนหนึ่งที่ไม่ ทราบจํานวนบรรทัดที่แน่ ชัด แล้ วทําการนับจํานวนคํา
                  ู
(Number of Words) ทังหมดที่ปรากฎอย่ ูในแฟมข้ อมลนัน พร้ อมทังแสดงผลลัพธ์ ท่ ีได้ ออกทางจอภาพ
                           ้                  ้      ู ้         ้
(10 คะแนน)




โจทย์ ข้อที่ 4 [ระดับง่ าย] จงเขียนโปรแกรมภาษาจาวาที่สมบรณ์ เพื่ออ่ านแฟมข้ อมลที่ช่ ือ data.txt ซึ่ง
                                                          ู                ้    ู
ภายในเก็บข้ อมลที่เป็ นข้ อความจํานวนหนึ่ งที่ไม่ ทราบจํานวนบรรทัดที่แน่ ชัด แล้ วทําการนั บจํานวน
                  ู
อักขระ (Number of Characters) ทังหมดที่ปรากฎอย่ ูในแฟมข้ อมลนัน โดยอักขระในที่นีอาจจะเป็ น
                                       ้                    ้         ู ้                 ้
ตัวอักษร ตัวเลข หรื อ สัญลักษณ์ ต่างๆ ก็ได้ พร้ อมทังแสดงผลลัพธ์ ท่ ได้ ออกทางจอภาพ (10 คะแนน)
                                                    ้               ี




© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                            ้
70     Computer Programming using Java                                                       06 - File Operations


     โจทย์ ข้อที่ 5 [ระดับปานกลาง] จงเขียนโปรแกรมภาษาจาวาให้ สมบรณ์ เพื่ออ่ านแฟมข้ อมล student.
                                                                         ู           ้      ู
     txt ซึ่งเป็ นแฟมข้ อมลที่เก็บรายชื่อนิสิตที่ลงทะเบียนเรี ยนรายวิชา 2110191 Innovative Thinking เพื่อ
                     ้     ู
     ตรวจนั บ ว่ ามีนิสิตคณะวิศวกรรมศาสตร์ ท่ ีลงทะเบียนในวิชานี จํานวนกี่คน โดยภายในแฟมมีรู ปแบบ
                                                                   ้                          ้
     ข้ อมลตามดังตัวอย่ างข้ างล่ างนี ้ (10 คะแนน)
          ู
                          student.txt                                    ตัวอย่ างการแสดงผลบนจอภาพ
      1.      Wongyos         Keardsri        5271822821           Engineering Students: 2
      2.      Wannaporn       Yim-ngam        5330023422
      3.      Ong-ard         Rutsamee        5230586021
      ...


     หมายเหตุ ตัวเลขสองหลักสุดท้ ายของเลขประจําตัวนิสิตคือรหัสคณะซึ่งรหัสของคณะวิศวะฯ คือ 21
     import java.util.Scanner;
     import java.io.*;
     public class CountEngStudent {
       public static void main(String[] args) throws IOException {




       } //End of main
     } //End of class


     โจทย์ ข้อที่ 6 [ระดับปานกลาง] จงเขียนโปรแกรมภาษาจาวาให้ สมบรณ์ เพื่ออ่ านแฟมข้ อมล score.txt
                                                                           ู             ้      ู
     ซึ่งประกอบด้ วยเลขประจําตัวนิสิต คะแนนรวมสุทธิ (เต็ม 100 คะแนน) และรหัสคณะ เพื่อคํานวณหาผล
     การเรียนของนิสิตแต่ ละคนและแสดงผลลัพธ์ ออกทางจอภาพตามตัวอย่ างต่ อไปนี ้ โดยถ้ านิสิตได้ คะแนน
     ตังแต่ 60 คะแนนขึนไปจะได้ ผลการเรี ยนเป็ น “S” แต่ ถ้าตํ่ากว่ านันได้ ผลการเรียนเป็ น “U” (10 คะแนน)
        ้                 ้                                           ้
                     score.txt                               ตัวอย่ างการแสดงผลบนจอภาพ
      5330000221      45.23      21                    1.      5330000221      U
      5330000320      72.45      20                    2.      5330000320      S
      5330000421      91.11      21                    3.      5330000421      S
      5330000521      38.20      21                    4.      5330000521      U
      5330000622      60.00      22                    5.      5330000622      S
      ...                                              ...


     import java.util.Scanner;
     import java.io.*;
     public class StudentGrade {
       public static void main(String[] args) throws IOException {

     © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                                 ้
File Operations - 06                                               Computer Programming using Java              71




  } //End of main
} //End of class


โจทย์ ข้อที่ 7 [ระดับยาก] ฝ่ ายวัดผลและประเมินผลของสํานักทะเบียนจุฬาลงกรณ์ มหาวิทยาลัยได้ ส่ง
แฟมข้ อมลชื่อ student.dat มาให้ กับฝ่ ายพัฒนาโปรแกรมของบริ ษัทลานเกียร์ จํากัด ซึ่งประกอบไป
    ้         ู
ด้ วยข้ อมลของนิสิตดังนี ้ เลขประจําตัว ชื่อ นามสกุล และ ผลการเรี ยนเฉลี่ย โดยถกบันทึกไว้ ในรปแบบ
            ู                                                                     ู            ู
ตามที่ปรากฎ ซึ่งฝ่ ายพัฒนาฯ จะต้ องเขียนโปรแกรมภาษาจาวาเพื่ออ่ านแฟมข้ อมลดังกล่ าวแล้ วนํามา
                                                                             ้      ู
ประมวลผลดังรายการต่ อไปนี ้ (15 คะแนน)                                              student.dat
1) คํานวนหาชันปี ปั จจุบนของนิสิตแต่ ละคน เช่ น 5330000121 คือ 1st
                    ้         ั                                                4830000121
                                                                               preecha
2) เปลี่ยนชื่อนิสิตให้ เหลือเพียง 1 ตัวอักษรย่ อ โดยใช้ อักษรตัวแรกของชื่อ Lerdsirikul
      เต็มของนิสิตแต่ ละคน เช่ น Preecha จะได้ เป็ น P. หรื อ wongyos จะได้ 1.99
                                                                               5230000221
      เป็ น W. โดยที่อกษรย่ อต้ องเป็ นอักษรพิมพ์ ใหญ่ เท่ านัน
                      ั                                        ้               Suwaraporn
                                                                               Chokkhoukhang
3) แสดงสถานะการเรี ยนของนิ สิตแต่ ละคน โดยถ้ ามีผลการเรี ยนตังแต่ 2.02    ้
                                                                               5330000321
      2.00 ขึนไปให้ แสดงสถานะว่ า “Pass” ถ้ าอย่ ูระหว่ าง 1.00–2.00 ให้ แสดง Ruksajai
                ้
                                                                               Suksawatdee
      สถานะว่ า “Critical” ถ้ าตํ่ากว่ า 1.00 ให้ แสดงสถานะว่ า “Retired”      0.56
4) แสดงข้ อมลของนิสิตแต่ ละคนให้ อย่ ูภายในบรรทัดเดียวกันดังตัวอย่ าง ...
                  ู
      ต่ อไปนี ้
  1.     4830000121      6th     P. Lerdsirikul           1.99    Critical
  2.     5230000221      2nd     S. Chokkhoukhang         2.02    Pass
  3.     5330000321      1st     R. Suksawatdee           0.56    Retired
  ...

import java.util.Scanner;
import java.io.*;
public class StudentInfoFromFile {
  public static void main(String[] args) throws IOException {

© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                            ้
72     Computer Programming using Java                                                       06 - File Operations




       } //End of main
     } //End of class


     โจทย์ ข้อที่ 8 [ระดับยาก] จงเขียนโปรแกรมภาษาจาวาที่สมบรณ์ เพื่อนับคําว่ า “love” จากแฟมข้ อมล
                                                                        ู                               ้      ู
     song.txt โดยไม่ สนใจอักษรพิมพ์ ใหญ่ และอักษรพิมพ์ เล็ก ซึ่งกําหนดให้ มีวิธีการนับ 2 วิธีคือ วิธีท่ ีหนึ่ง
     นับแบบสนใจช่ องว่ างที่แบ่ งคํา (นับทีละคํา) เช่ น “love you my lovely” จะมีคาว่ า “love” 1 คํา และวิธีท่ ี
                                                                                     ํ
     สองนับแบบไม่ สนใจช่ องว่ างที่แบ่ งคํา (เอาช่ องว่ างออก) เช่ น “love you my lovely” จะมีคาว่ า “love” 2 คํา
                                                                                               ํ
     พร้ อมทังแสดงผลลัพธ์ ของการนับทังสองวิธีออกทางจอภาพดังตัวอย่ างต่ อไปนี ้ (15 คะแนน)
              ้                          ้
                     song.txt                                ตัวอย่ างการแสดงผลบนจอภาพ
      I Love you all over LOvE java.                   Count Words #1: 3
      I lOVe some lovely friend.                       Count Words #2: 7
      LoveloVe java!!.


     © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                                 ้
File Operations - 06                                               Computer Programming using Java              73




โจทย์ ข้อที่ 9 [ระดับยาก] จงเขียนโปรแกรมภาษาจาวาให้ สมบรณ์ เพื่ออ่ านแฟมข้ อมล data1.dat และ
                                                              ู        ้      ู
data2.dat ซึ่งเก็บข้ อมลผลการเรี ยนของนิสิตที่ลงทะเบียนรายวิชา 2110101 ภาคการศึกษาต้ น ของปี
                          ู
การศึกษา 2552 และปี การศึกษา 2553 ตามลําดับ จากนันให้ คานวนหาจํานวนนิสิตที่ได้ ผลการเรี ยนเป็ น
                                                      ้     ํ
“F” ว่ ามีร้อยละเท่ าไรของนิสิตที่ลงทะเบียนในภาคการศึกษานันๆ และแสดงผลว่ าปี การศึกษาใดที่มีนิสิต
                                                          ้
ได้ ผลการเรียนเป็ น “F” มากกว่ ากัน (15 คะแนน)
                data1.dat                                     data2.dat
 No.   Student ID Grade                         No.   Student ID Grade
 ========================                       ========================
 1.    5230000121 C+                            1.    5330000121 F
 2.    5230000221 A                             2.    5330000221 F
 3.    5230000321 B+                            3.    5330000321 F
 4.    5230000421 F                             4.    5330000421 D+
 5.    5230000521 B                             5.    5330000521 A
 ...                                            ...


import java.util.Scanner;
import java.io.*;
public class FComparison {
  public static void main(String[] args) throws IOException {


© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                            ้
74     Computer Programming using Java                                                       06 - File Operations




       } //End of main
     } //End of class


     2. ขันตอนการเขียนแฟมข้ อมล
          ้                   ้       ู
        การเขี ยนแฟ้ มข้ อมูลในภาษาจาวาสามารถทํ าได้ ห ลายวิธี เ ช่น เดีย วกับ การอ่านแฟ มข้ อมูล แต่ใ นบทนี จะ
                                                                                            ้                ้
        นําเสนอการเขียนแฟ้ มข้ อมูลด้ วยคลาส PrintStream โดยมีขนตอนต่างๆ ดังต่อไปนี ้
                                                                     ั้
        1) การนําเข้ าคลาส PrintStream ก่อนการเปิ ดเขียนแฟ้ มข้ อมูลจะต้ องนําเข้ าคลาส PrintStream ซึงอยู่ใน
                                                                                                         ่
            แพ็คเก็จ java.io ก่อนเสมอ โดยใช้ คําสัง import java.io.*; ซึงระบุไว้ ก่อนเขียนหัวคลาส โดยปฏิบติ
                                                   ่                            ่                              ั
            เช่นเดียวกับการเปิ ดอ่านแฟ้ มข้ อมูล
        2) การตรวจสอบความผิดพลาดในการเปิ ดเขียนแฟมข้ อมล เมท็อดใดก็ตามที่เป็ นเมท็อดสําหรับเปิ ด
                                                                  ้         ู
            เขียนแฟ้ มข้ อมูล จะต้ องมีการระบุสวนของคําสัง throws IOException ไว้ ตอนท้ ายของหัวเมท็อดนัน
                                                 ่          ่                                                    ้
            เสมอ ซึงปฏิบตเิ ช่นเดียวกับการเปิ ดอ่านแฟ้ มข้ อมูล เพื่อให้ ระบบตรวจสอบข้ อผิดพลาด
                    ่     ั
     © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                                 ้
File Operations - 06                                                  Computer Programming using Java             75
    3) การสร้ างตัวเขียนจากแฟมข้ อมล เป็ นการกําหนดชื่อตัวเขียนเพื่อใช้ สําหรับเขียนข้ อมูลต่างๆ ลงไปใน
                                 ้      ู
       แฟมข้ อมูล โดยจะสร้ างเพียงครังเดียวเท่านัน และจะใช้ งานตัวเขียนนันตลอดทังโปรแกรม ซึงมีคําสังดังนี ้
         ้                           ้           ้                       ้      ้          ่       ่
         PrintStream <ชื่อตัวเขียน> = new PrintStream(new File("<ชื่อแฟมข้ อมูล>"));
                                                                       ้

         1      import java.util.Scanner;
         2      import java.io.*;
         3      public class Test {
         4        public static void main(String[] args) throws IOException {
         5          PrintStream out = new PrintStream(new File("data.txt"));
         6          ...
         7
         8
                  }             ตัวเขียนแฟมข้ อมูลชื่อว่า out
                                          ้                   เปิ ดเขียนแฟมข้ อมูลที่ชื่อ data.txt
                                                                          ้
                }


    4) การเขียนข้ อมลด้ วยตัวเขียนแฟมข้ อมล ตัวเขียนแฟ้ มข้ อมูลที่สร้ างขึ ้นสามารถเขียนข้ อมูลประเภท
                       ู                  ้       ู
       จํานวนเต็ม จํานวนจริง และสตริ ง โดยใช้ คําสังและเมท็อดต่อไปนี ้
                                                    ่
       1) คําสังเพื่อเขียนข้ อมูลลงในแฟ้ มข้ อมูลทีละบรรทัดแต่ไม่มีการขึ ้นบรรทัดใหม่
               ่
               <ชื่อตัวเขียน>.print(<ข้ อมูล>);                             ทํางานคล้ ายกับคําสัง
                                                                                                ่
                                                                            System.out.print(…);
           เช่น out.print("Start New File");
        2) คําสังเพื่อเขียนข้ อมูลลงในแฟ้ มข้ อมูลทีละบรรทัดพร้ อมทังขึ ้นบรรทัดใหม่
                ่                                                   ้
               <ชื่อตัวเขียน>.println(<ข้ อมูล>);                           ทํางานคล้ ายกับคําสัง
                                                                                                ่
                                                                            System.out.println(…);
              เช่น   out.println("Start New File");

    5) การปิ ดแฟมข้ อมล เมื่อเขียนข้ อมูลเสร็ จสิ ้นเรี ยบร้ อยแล้ ว จะต้ องทําการปิ ดแฟมข้ อมูลที่เขียนนันเสมอ
                  ้     ู                                                               ้                 ้
       โดยใช้ เมท็อด close()ซึงปฏิบตเิ ช่นเดียวกับการอ่านแฟ้ มข้ อมูล
                              ่    ั
    6) ตัวอย่ างการเขียนโปรแกรมเปิ ดเขียนแฟมข้ อมลแบบครบทุกขันตอน
                                                ้         ู                 ้
         1      import java.util.Scanner;
         2      import java.io.*;                 ถ้ าต้ องการรับค่าจากแปนพิมพ์ ก็ต้องมีคําสังนี ้ด้ วย
                                                                         ้                   ่
         3      public class Test {
         4        public static void main(String[] args) throws IOException {
         5          PrintStream out = new PrintStream(new File("data.dat"));
         6          for(int i = 1; i <= 10; i++) {
         7            out.println("Line #" + i);
         8          }                                        วนเขียน (บันทึก) ข้ อมูลลงไปในแฟมข้ อมูลทีละ
                                                                                               ้
         9          out.close();
         10       }                ปิ ดแฟมข้ อมูล
                                         ้                   บรรทัด โดยจะไม่มีผลลัพธ์แสดงที่จอภาพ แต่
         11     }                                            ผลลัพธ์จะแสดงอยูภายในแฟ้ มข้ อมูลแทน
                                                                                 ่

โจทย์ ข้อที่ 10 [ระดับง่ าย] จงเขียนโปรแกรมภาษาจาวาที่สมบรณ์ เพื่อรั บประโยคจากแปนพิมพ์ ทละประ-
                                                         ู                       ้       ี
โยค แล้ วบันทึกลงในแฟมข้ อมลที่ช่ ือ sentence.txt โดยไม่ ต้องแสดงผลลัพธ์ บนจอภาพ ซึ่งจะวนรั บ
                          ้       ู
ประโยคไปเรื่อยๆ จนกว่ าจะพิมพ์ ประโยคว่ า “Stop” ก็จะจบการวนซํา (10 คะแนน)
                                                                 ้
© สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                            ้
76     Computer Programming using Java                                                       06 - File Operations




     โจทย์ ข้อที่ 11 [ระดับยาก] จงเขียนโปรแกรมภาษาจาวาที่สมบรณ์ เพื่ออ่ านแฟมข้ อมล text.txt แล้ วทํา
                                                                     ู          ้     ู
     การกลับข้ อความหรื อประโยคที่ปรากฏอย่ ูในแฟมข้ อมลทีละบรรทัด เช่ น We love java จะได้ เป็ น
                                                      ้       ู
     avaj evol eW เป็ นต้ น พร้ อมทังเก็บผลลัพธ์ ท่ ได้ ไว้ ในแฟมข้ อมล revtext.txt (15 คะแนน)
                                      ้             ี           ้      ู
                         text.txt                                               revtext.txt
      We love java                                             avaj evol eW
      Java is my first programming and                         dna gnimmargorp tsrif ym si avaJ
      Java is my last programming                              gnimmargorp tsal ym si avaJ
      ...                                                      ...




     © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์)
                                                 ้

Más contenido relacionado

La actualidad más candente

1.Introduction to java
1.Introduction to java1.Introduction to java
1.Introduction to javaUsableLabs
 
Java-Answer Chapter 01-04 (For Print)
Java-Answer Chapter 01-04 (For Print)Java-Answer Chapter 01-04 (For Print)
Java-Answer Chapter 01-04 (For Print)Wongyos Keardsri
 
Java-Answer Chapter 12-13 (For Print)
Java-Answer Chapter 12-13 (For Print)Java-Answer Chapter 12-13 (For Print)
Java-Answer Chapter 12-13 (For Print)Wongyos Keardsri
 
Java Programming: คลาสอินพุตและเอาต์พุต
Java Programming: คลาสอินพุตและเอาต์พุตJava Programming: คลาสอินพุตและเอาต์พุต
Java Programming: คลาสอินพุตและเอาต์พุตThanachart Numnonda
 
2.Java fundamentals
2.Java fundamentals2.Java fundamentals
2.Java fundamentalsUsableLabs
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นคลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นParn Nichakorn
 
6.Flow control
6.Flow control6.Flow control
6.Flow controlUsableLabs
 
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)Thanachart Numnonda
 
Java-Chapter 05 String Operations
Java-Chapter 05 String OperationsJava-Chapter 05 String Operations
Java-Chapter 05 String OperationsWongyos Keardsri
 
Java-Chapter 13 Advanced Classes and Objects
Java-Chapter 13 Advanced Classes and ObjectsJava-Chapter 13 Advanced Classes and Objects
Java-Chapter 13 Advanced Classes and ObjectsWongyos Keardsri
 
Java-Chapter 02 Data Operations and Processing
Java-Chapter 02 Data Operations and ProcessingJava-Chapter 02 Data Operations and Processing
Java-Chapter 02 Data Operations and ProcessingWongyos Keardsri
 
Java Programming: โครงสร้างควบคุม
Java Programming: โครงสร้างควบคุมJava Programming: โครงสร้างควบคุม
Java Programming: โครงสร้างควบคุมThanachart Numnonda
 

La actualidad más candente (20)

1.Introduction to java
1.Introduction to java1.Introduction to java
1.Introduction to java
 
Java-Answer Chapter 01-04 (For Print)
Java-Answer Chapter 01-04 (For Print)Java-Answer Chapter 01-04 (For Print)
Java-Answer Chapter 01-04 (For Print)
 
Java-Answer Chapter 05-06
Java-Answer Chapter 05-06Java-Answer Chapter 05-06
Java-Answer Chapter 05-06
 
3.Expression
3.Expression3.Expression
3.Expression
 
Java-Answer Chapter 12-13 (For Print)
Java-Answer Chapter 12-13 (For Print)Java-Answer Chapter 12-13 (For Print)
Java-Answer Chapter 12-13 (For Print)
 
Java Programming: คลาสอินพุตและเอาต์พุต
Java Programming: คลาสอินพุตและเอาต์พุตJava Programming: คลาสอินพุตและเอาต์พุต
Java Programming: คลาสอินพุตและเอาต์พุต
 
Lesson5
Lesson5Lesson5
Lesson5
 
8.Inheritance
8.Inheritance8.Inheritance
8.Inheritance
 
Lab Computer Programming 1
Lab Computer Programming 1Lab Computer Programming 1
Lab Computer Programming 1
 
Java-Answer Chapter 12-13
Java-Answer Chapter 12-13Java-Answer Chapter 12-13
Java-Answer Chapter 12-13
 
2.Java fundamentals
2.Java fundamentals2.Java fundamentals
2.Java fundamentals
 
Java-Answer Chapter 01-04
Java-Answer Chapter 01-04Java-Answer Chapter 01-04
Java-Answer Chapter 01-04
 
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้นคลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
 
6.Flow control
6.Flow control6.Flow control
6.Flow control
 
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
 
Java-Chapter 05 String Operations
Java-Chapter 05 String OperationsJava-Chapter 05 String Operations
Java-Chapter 05 String Operations
 
Java-Chapter 13 Advanced Classes and Objects
Java-Chapter 13 Advanced Classes and ObjectsJava-Chapter 13 Advanced Classes and Objects
Java-Chapter 13 Advanced Classes and Objects
 
Java-Chapter 02 Data Operations and Processing
Java-Chapter 02 Data Operations and ProcessingJava-Chapter 02 Data Operations and Processing
Java-Chapter 02 Data Operations and Processing
 
Python Course #1
Python Course #1Python Course #1
Python Course #1
 
Java Programming: โครงสร้างควบคุม
Java Programming: โครงสร้างควบคุมJava Programming: โครงสร้างควบคุม
Java Programming: โครงสร้างควบคุม
 

Destacado

Java-Chapter 09 Advanced Statements and Applications
Java-Chapter 09 Advanced Statements and ApplicationsJava-Chapter 09 Advanced Statements and Applications
Java-Chapter 09 Advanced Statements and ApplicationsWongyos Keardsri
 
Java-Chapter 14 Creating Graphics with DWindow
Java-Chapter 14 Creating Graphics with DWindowJava-Chapter 14 Creating Graphics with DWindow
Java-Chapter 14 Creating Graphics with DWindowWongyos Keardsri
 
Java-Chapter 10 Two Dimensional Arrays
Java-Chapter 10 Two Dimensional ArraysJava-Chapter 10 Two Dimensional Arrays
Java-Chapter 10 Two Dimensional ArraysWongyos Keardsri
 
Java-Chapter 04 Iteration Statements
Java-Chapter 04 Iteration StatementsJava-Chapter 04 Iteration Statements
Java-Chapter 04 Iteration StatementsWongyos Keardsri
 
Java-Chapter 07 One Dimensional Arrays
Java-Chapter 07 One Dimensional ArraysJava-Chapter 07 One Dimensional Arrays
Java-Chapter 07 One Dimensional ArraysWongyos Keardsri
 
Java-Chapter 11 Recursions
Java-Chapter 11 RecursionsJava-Chapter 11 Recursions
Java-Chapter 11 RecursionsWongyos Keardsri
 
Java-Answer Chapter 07 (For Print)
Java-Answer Chapter 07 (For Print)Java-Answer Chapter 07 (For Print)
Java-Answer Chapter 07 (For Print)Wongyos Keardsri
 
การควบคุมทิศทางการทำงานของโปรแกรม
การควบคุมทิศทางการทำงานของโปรแกรมการควบคุมทิศทางการทำงานของโปรแกรม
การควบคุมทิศทางการทำงานของโปรแกรมkorn27122540
 
How to Study and Research in Computer-related Master Program
How to Study and Research in Computer-related Master ProgramHow to Study and Research in Computer-related Master Program
How to Study and Research in Computer-related Master ProgramWongyos Keardsri
 

Destacado (11)

Java-Chapter 08 Methods
Java-Chapter 08 MethodsJava-Chapter 08 Methods
Java-Chapter 08 Methods
 
Java-Chapter 09 Advanced Statements and Applications
Java-Chapter 09 Advanced Statements and ApplicationsJava-Chapter 09 Advanced Statements and Applications
Java-Chapter 09 Advanced Statements and Applications
 
Java-Chapter 14 Creating Graphics with DWindow
Java-Chapter 14 Creating Graphics with DWindowJava-Chapter 14 Creating Graphics with DWindow
Java-Chapter 14 Creating Graphics with DWindow
 
Java-Chapter 10 Two Dimensional Arrays
Java-Chapter 10 Two Dimensional ArraysJava-Chapter 10 Two Dimensional Arrays
Java-Chapter 10 Two Dimensional Arrays
 
Java-Chapter 04 Iteration Statements
Java-Chapter 04 Iteration StatementsJava-Chapter 04 Iteration Statements
Java-Chapter 04 Iteration Statements
 
Java-Chapter 07 One Dimensional Arrays
Java-Chapter 07 One Dimensional ArraysJava-Chapter 07 One Dimensional Arrays
Java-Chapter 07 One Dimensional Arrays
 
Java-Chapter 11 Recursions
Java-Chapter 11 RecursionsJava-Chapter 11 Recursions
Java-Chapter 11 Recursions
 
Java-Answer Chapter 07 (For Print)
Java-Answer Chapter 07 (For Print)Java-Answer Chapter 07 (For Print)
Java-Answer Chapter 07 (For Print)
 
IP address anonymization
IP address anonymizationIP address anonymization
IP address anonymization
 
การควบคุมทิศทางการทำงานของโปรแกรม
การควบคุมทิศทางการทำงานของโปรแกรมการควบคุมทิศทางการทำงานของโปรแกรม
การควบคุมทิศทางการทำงานของโปรแกรม
 
How to Study and Research in Computer-related Master Program
How to Study and Research in Computer-related Master ProgramHow to Study and Research in Computer-related Master Program
How to Study and Research in Computer-related Master Program
 

Similar a Java-Chapter 06 File Operations

ใบความรู้ที่ 2.4 ขั้นตอนการสร้างเว็บhtml
ใบความรู้ที่ 2.4 ขั้นตอนการสร้างเว็บhtmlใบความรู้ที่ 2.4 ขั้นตอนการสร้างเว็บhtml
ใบความรู้ที่ 2.4 ขั้นตอนการสร้างเว็บhtmlSmo Tara
 
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซีใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซีNattapon
 
Basic Windows 7 Application for KKU. Staff
Basic Windows 7 Application for KKU. StaffBasic Windows 7 Application for KKU. Staff
Basic Windows 7 Application for KKU. StaffKrit Kamtuo
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาพื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาAeew Autaporn
 
โปรแกรม Microsoft Access 2007
โปรแกรม Microsoft Access 2007โปรแกรม Microsoft Access 2007
โปรแกรม Microsoft Access 2007kruthanyaporn
 
ระบบปฏิบัติการ Linux server
ระบบปฏิบัติการ Linux serverระบบปฏิบัติการ Linux server
ระบบปฏิบัติการ Linux serverตอ ต้น
 
หน่วยการเรียนรู้ที่ 2
หน่วยการเรียนรู้ที่ 2หน่วยการเรียนรู้ที่ 2
หน่วยการเรียนรู้ที่ 2SubLt Masu
 

Similar a Java-Chapter 06 File Operations (20)

ใบความรู้ที่ 2.4 ขั้นตอนการสร้างเว็บhtml
ใบความรู้ที่ 2.4 ขั้นตอนการสร้างเว็บhtmlใบความรู้ที่ 2.4 ขั้นตอนการสร้างเว็บhtml
ใบความรู้ที่ 2.4 ขั้นตอนการสร้างเว็บhtml
 
Exe2[1]
Exe2[1]Exe2[1]
Exe2[1]
 
Exe2[1]
Exe2[1]Exe2[1]
Exe2[1]
 
Exe2[1]
Exe2[1]Exe2[1]
Exe2[1]
 
Exe2[1]
Exe2[1]Exe2[1]
Exe2[1]
 
รูปทรงกลม
รูปทรงกลมรูปทรงกลม
รูปทรงกลม
 
Exe2[1]
Exe2[1]Exe2[1]
Exe2[1]
 
Exe2[1]
Exe2[1]Exe2[1]
Exe2[1]
 
โปรแกรมย่อยและฟังก์ชัน
โปรแกรมย่อยและฟังก์ชันโปรแกรมย่อยและฟังก์ชัน
โปรแกรมย่อยและฟังก์ชัน
 
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซีใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
 
Basic Windows 7 Application for KKU. Staff
Basic Windows 7 Application for KKU. StaffBasic Windows 7 Application for KKU. Staff
Basic Windows 7 Application for KKU. Staff
 
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวาพื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
 
N2 (2)
N2 (2)N2 (2)
N2 (2)
 
โปรแกรม Microsoft Access 2007
โปรแกรม Microsoft Access 2007โปรแกรม Microsoft Access 2007
โปรแกรม Microsoft Access 2007
 
ระบบปฏิบัติการ Linux server
ระบบปฏิบัติการ Linux serverระบบปฏิบัติการ Linux server
ระบบปฏิบัติการ Linux server
 
20121102 joomla2-5
20121102 joomla2-520121102 joomla2-5
20121102 joomla2-5
 
หน่วยการเรียนรู้ที่ 2
หน่วยการเรียนรู้ที่ 2หน่วยการเรียนรู้ที่ 2
หน่วยการเรียนรู้ที่ 2
 
Pbl2
Pbl2Pbl2
Pbl2
 
9.1 9.10
9.1  9.109.1  9.10
9.1 9.10
 
Java intro
Java introJava intro
Java intro
 

Más de Wongyos Keardsri

The next generation intelligent transport systems: standards and applications
The next generation intelligent transport systems: standards and applicationsThe next generation intelligent transport systems: standards and applications
The next generation intelligent transport systems: standards and applicationsWongyos Keardsri
 
SysProg-Tutor 03 Unix Shell Script Programming
SysProg-Tutor 03 Unix Shell Script ProgrammingSysProg-Tutor 03 Unix Shell Script Programming
SysProg-Tutor 03 Unix Shell Script ProgrammingWongyos Keardsri
 
SysProg-Tutor 02 Introduction to Unix Operating System
SysProg-Tutor 02 Introduction to Unix Operating SystemSysProg-Tutor 02 Introduction to Unix Operating System
SysProg-Tutor 02 Introduction to Unix Operating SystemWongyos Keardsri
 
SysProg-Tutor 01 Introduction to C Programming Language
SysProg-Tutor 01 Introduction to C Programming LanguageSysProg-Tutor 01 Introduction to C Programming Language
SysProg-Tutor 01 Introduction to C Programming LanguageWongyos Keardsri
 
Discrete-Chapter 11 Graphs Part III
Discrete-Chapter 11 Graphs Part IIIDiscrete-Chapter 11 Graphs Part III
Discrete-Chapter 11 Graphs Part IIIWongyos Keardsri
 
Discrete-Chapter 11 Graphs Part II
Discrete-Chapter 11 Graphs Part IIDiscrete-Chapter 11 Graphs Part II
Discrete-Chapter 11 Graphs Part IIWongyos Keardsri
 
Discrete-Chapter 11 Graphs Part I
Discrete-Chapter 11 Graphs Part IDiscrete-Chapter 11 Graphs Part I
Discrete-Chapter 11 Graphs Part IWongyos Keardsri
 
Discrete-Chapter 09 Algorithms
Discrete-Chapter 09 AlgorithmsDiscrete-Chapter 09 Algorithms
Discrete-Chapter 09 AlgorithmsWongyos Keardsri
 
Discrete-Chapter 08 Relations
Discrete-Chapter 08 RelationsDiscrete-Chapter 08 Relations
Discrete-Chapter 08 RelationsWongyos Keardsri
 
Discrete-Chapter 07 Probability
Discrete-Chapter 07 ProbabilityDiscrete-Chapter 07 Probability
Discrete-Chapter 07 ProbabilityWongyos Keardsri
 
Discrete-Chapter 06 Counting
Discrete-Chapter 06 CountingDiscrete-Chapter 06 Counting
Discrete-Chapter 06 CountingWongyos Keardsri
 
Discrete-Chapter 05 Inference and Proofs
Discrete-Chapter 05 Inference and ProofsDiscrete-Chapter 05 Inference and Proofs
Discrete-Chapter 05 Inference and ProofsWongyos Keardsri
 
Discrete-Chapter 04 Logic Part II
Discrete-Chapter 04 Logic Part IIDiscrete-Chapter 04 Logic Part II
Discrete-Chapter 04 Logic Part IIWongyos Keardsri
 
Discrete-Chapter 04 Logic Part I
Discrete-Chapter 04 Logic Part IDiscrete-Chapter 04 Logic Part I
Discrete-Chapter 04 Logic Part IWongyos Keardsri
 
Discrete-Chapter 03 Matrices
Discrete-Chapter 03 MatricesDiscrete-Chapter 03 Matrices
Discrete-Chapter 03 MatricesWongyos Keardsri
 
Discrete-Chapter 02 Functions and Sequences
Discrete-Chapter 02 Functions and SequencesDiscrete-Chapter 02 Functions and Sequences
Discrete-Chapter 02 Functions and SequencesWongyos Keardsri
 
Discrete-Chapter 12 Modeling Computation
Discrete-Chapter 12 Modeling ComputationDiscrete-Chapter 12 Modeling Computation
Discrete-Chapter 12 Modeling ComputationWongyos Keardsri
 

Más de Wongyos Keardsri (19)

The next generation intelligent transport systems: standards and applications
The next generation intelligent transport systems: standards and applicationsThe next generation intelligent transport systems: standards and applications
The next generation intelligent transport systems: standards and applications
 
SysProg-Tutor 03 Unix Shell Script Programming
SysProg-Tutor 03 Unix Shell Script ProgrammingSysProg-Tutor 03 Unix Shell Script Programming
SysProg-Tutor 03 Unix Shell Script Programming
 
SysProg-Tutor 02 Introduction to Unix Operating System
SysProg-Tutor 02 Introduction to Unix Operating SystemSysProg-Tutor 02 Introduction to Unix Operating System
SysProg-Tutor 02 Introduction to Unix Operating System
 
SysProg-Tutor 01 Introduction to C Programming Language
SysProg-Tutor 01 Introduction to C Programming LanguageSysProg-Tutor 01 Introduction to C Programming Language
SysProg-Tutor 01 Introduction to C Programming Language
 
Discrete-Chapter 11 Graphs Part III
Discrete-Chapter 11 Graphs Part IIIDiscrete-Chapter 11 Graphs Part III
Discrete-Chapter 11 Graphs Part III
 
Discrete-Chapter 11 Graphs Part II
Discrete-Chapter 11 Graphs Part IIDiscrete-Chapter 11 Graphs Part II
Discrete-Chapter 11 Graphs Part II
 
Discrete-Chapter 11 Graphs Part I
Discrete-Chapter 11 Graphs Part IDiscrete-Chapter 11 Graphs Part I
Discrete-Chapter 11 Graphs Part I
 
Discrete-Chapter 10 Trees
Discrete-Chapter 10 TreesDiscrete-Chapter 10 Trees
Discrete-Chapter 10 Trees
 
Discrete-Chapter 09 Algorithms
Discrete-Chapter 09 AlgorithmsDiscrete-Chapter 09 Algorithms
Discrete-Chapter 09 Algorithms
 
Discrete-Chapter 08 Relations
Discrete-Chapter 08 RelationsDiscrete-Chapter 08 Relations
Discrete-Chapter 08 Relations
 
Discrete-Chapter 07 Probability
Discrete-Chapter 07 ProbabilityDiscrete-Chapter 07 Probability
Discrete-Chapter 07 Probability
 
Discrete-Chapter 06 Counting
Discrete-Chapter 06 CountingDiscrete-Chapter 06 Counting
Discrete-Chapter 06 Counting
 
Discrete-Chapter 05 Inference and Proofs
Discrete-Chapter 05 Inference and ProofsDiscrete-Chapter 05 Inference and Proofs
Discrete-Chapter 05 Inference and Proofs
 
Discrete-Chapter 04 Logic Part II
Discrete-Chapter 04 Logic Part IIDiscrete-Chapter 04 Logic Part II
Discrete-Chapter 04 Logic Part II
 
Discrete-Chapter 04 Logic Part I
Discrete-Chapter 04 Logic Part IDiscrete-Chapter 04 Logic Part I
Discrete-Chapter 04 Logic Part I
 
Discrete-Chapter 03 Matrices
Discrete-Chapter 03 MatricesDiscrete-Chapter 03 Matrices
Discrete-Chapter 03 Matrices
 
Discrete-Chapter 02 Functions and Sequences
Discrete-Chapter 02 Functions and SequencesDiscrete-Chapter 02 Functions and Sequences
Discrete-Chapter 02 Functions and Sequences
 
Discrete-Chapter 01 Sets
Discrete-Chapter 01 SetsDiscrete-Chapter 01 Sets
Discrete-Chapter 01 Sets
 
Discrete-Chapter 12 Modeling Computation
Discrete-Chapter 12 Modeling ComputationDiscrete-Chapter 12 Modeling Computation
Discrete-Chapter 12 Modeling Computation
 

Java-Chapter 06 File Operations

  • 1. File Operations - 06 Computer Programming using Java 65 CHAPTER การดําเนินการกับแฟมข้อมูล ้ 06 (File Operations) 1. ลักษณะทั่วไปของแฟมข้ อมล (Characteristic of File) ้ ู 1. นิยามและข้ อมลเบืองต้ นของแฟมข้ อมล ู ้ ้ ู 1) แฟมข้ อมูล (File / Text File) คือ แฟมเอกสารหรื อไฟล์ที่มีรายการข้ อมูลอยู่ภายใน ซึงจะถูกจัดเก็บไว้ เป็ น ้ ้ ่ แฟมนามสกุลต่างๆ เช่น *.txt, *.dat หรื อ นามสกุลอื่นๆ ซึงแสดงไว้ ในตัวอย่างของแฟ้ มข้ อมูลต่อไปนี ้ ้ ่ แฟมข้ อมูลชื่อ "data.txt" สร้ างขึ ้นโดย ้ โปรแกรม Notepad โดยแฟมนี ้มีนามสกุลเป็ น ้ *.txt ซึงภายในเก็บผลการเรี ยนของนิสต ่ ิ กลุมหนึง ่ ่ 2) ข้ อมูลที่จดเก็บในแฟมข้ อมูลสามารถมีได้ ไม่จํากัดจํานวนบรรทัด (ยาวกี่บรรทัดก็ได้ ) ั ้ 3) ประเภทข้ อมูลที่เก็บอยูในแฟมข้ อมูลประกอบไปด้ วย ตัวเลข (จํานวนเต็ม และจํานวนจริง) และสตริง ่ ้ 4) ขนาดของแฟ้ มข้ อมูลคํานวนได้ จากจํานวนของอักขระทุกตัวที่เก็บอยูในแฟมข้ อมูลนัน (1 อักขระ = 1 Byte) ่ ้ ้ 2. การดําเนินการกับแฟมข้ อมล ้ ู การดําเนินการกับแฟมข้ อมูล คือ การกระทําหรื อประมวลผลบางอย่างกับแฟมข้ อมูล ซึ่งในเอกสารบทนีจะ ้ ้ ้ นําเสนอ [1] การอ่านแฟ้ มข้ อมูล และ [2] การเขียนแฟ้ มข้ อมูล 1) การอ่านแฟ้ มข้ อมูล (Reading File) คือ การรับค่าหรื อรับข้ อมูลจากแฟมข้ อมูลเข้ ามายังเครื่ องคอมพิวเตอร์ ้ เพื่อกระทําบางสิงบางอย่าง เช่น คํานวนผล แสดงผล เป็ นต้ น ่ 2) การเขียนแฟ้ มข้ อมูล (Writing File) คือ การบันทึกค่าหรื อบันทึกข้ อมูลจากการประมวลผลบนเครื่ อง คอมพิวเตอร์ ไปเก็บไว้ ยงแฟมข้ อมูล ั ้ 2. การอ่ านและเขียนแฟมข้ อมล (Reading and Writing Files) ้ ู 1. ขันตอนการอ่ านแฟมข้ อมล ้ ้ ู การอ่านแฟมข้ อมูลในภาษาจาวาสามารถทําได้ หลายวิธี แต่ในบทนี ้จะนําเสนอการอ่านแฟ้ มข้ อมูลด้ วยคลาส ้ Scanner ซึงมีลกษณะการทํางานเช่นเดียวกับการอ่านข้ อมูลจากแปนพิมพ์ที่กล่าวไปแล้ วในบทที่ 2 โดยมีขน- ่ ั ้ ั้ ตอนต่างๆ ดังต่อไปนี ้ 1) การนําเข้ าคลาส Scanner และแพ็คเก็จ java.io ก่อนการเปิ ดอ่านแฟ้ มข้ อมูลจะต้ องนําเข้ าคลาส Scanner และแพ็คเก็จ java.io ก่อนเสมอ โดยใช้ คําสัง import java.util.Scanner; และคําสัง ่ ่ import java.io.*; ซึงระบุไว้ ก่อนเขียนหัวคลาส ดังตัวอย่าง ่ © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 2. 66 Computer Programming using Java 06 - File Operations 1 import java.util.Scanner; การ import สองคําสังนี ้ จะให้ คําสังใด ่ ่ 2 import java.io.*; 3 public class Test { ขึ ้นก่อนก็ได้ แต่ต้องมีให้ ครบทัง้ 2 คําสัง ่ 4 ... 5 } 2) การตรวจสอบความผิดพลาดในการเปิ ดอ่ านแฟมข้ อมล เมท็อดใดก็ตามที่เป็ นเมท็อดสําหรับเปิ ดอ่าน ้ ู แฟมข้ อมูล (ในที่นี ้คือเมท็อด main) จะต้ องมีการระบุสวนของคําสัง throws IOException ไว้ ตอนท้ าย ้ ่ ่ ของหัวเมท็อดนันเสมอ เพื่อให้ ระบบตรวจสอบข้ อผิดพลาด เช่น ตรวจสอบว่าแฟมข้ อมูลที่เปิ ดอ่านมีอยู่จริ ง ้ ้ ในระบบหรื อไม่ เป็ นต้ น ดังตัวอย่าง 1 import java.util.Scanner; 2 import java.io.*; คําว่า throws ต้ องเติม s ด้ วย 3 public class Test { 4 public static void main(String[] args) throws IOException { 5 ... 6 } 7 } 3) การสร้ างตัวอ่ านจากแฟมข้ อมล เป็ นการกําหนดชื่อตัวอ่านเพื่อใช้ สําหรับอ่านค่าข้ อมูลต่างๆ จาก ้ ู แฟมข้ อมูล โดยจะสร้ างเพียงครังเดียวเท่านัน และจะใช้ งานตัวอ่านนันตลอดทังโปรแกรม ซึงมีคําสังดังนี ้ ้ ้ ้ ้ ้ ่ ่ Scanner <ชื่อตัวอ่าน> = new Scanner(new File("<ชื่อแฟมข้ อมูล>")); ้ หรื อ File <ชื่อตัวเรี ยกแฟมข้ อมูล> = new File("<ชื่อแฟมข้ อมูล>") ้ ้ Scanner <ชื่อตัวอ่าน> = new Scanner(<ชื่อตัวเรี ยกแฟมข้ อมูล>); ้ 1 import java.util.Scanner; 2 import java.io.*; เปิ ดอ่านแฟมข้ อมูลที่ชื่อ data.txt ้ 3 public class Test { 4 public static void main(String[] args) throws IOException { 5 Scanner in = new Scanner(new File("data.txt")); 6 ... 7 } ตัวอ่านแฟมข้ อมูลชื่อว่า in ้ เข้ ามาแทนที่คําสัง System.in ่ 8 } เดิม ซึงจะหมายถึงแฟมข้ อมูล ่ ้ 4) การตรวจสอบว่ ายังมีข้อมลเหลือให้ อ่านในแฟมข้ อมลอีกหรือไม่ เมื่อประกาศและสร้ างทุกอย่างตาม ู ้ ู ขันตอนที่ 1-3 แล้ ว ขันตอนแรกที่จะเริ่ มอ่านข้ อมูลตังแต่ต้นแฟมจนถึงท้ ายแฟ้ มนัน จะต้ องตรวจสอบก่อน ้ ้ ้ ้ ้ เสมอว่ายังมีข้อมูลในแฟมเหลือให้ อานอีกหรื อไม่ ซึงใช้ เมท็อด hasNext() ในการตรวจสอบ โดยคําตอบที่ ้ ่ ่ ได้ จะเป็ นค่าความจริง (Boolean) ซึงมีรูปแบบคําสังดังนี ้ ่ ่ ตรวจสอบว่ายังมีข้อมูลเหลือในแฟมอีกหรื อไม่ ถ้ า ้ while(<ชื่อตัวอ่าน>.hasNext()) { ยังเหลือ (ยัง Next ได้ ) ก็จะวนอ่านข้ อมูลไปเรื่ อยๆ ... } คําสังอ่านค่าข้ อมูล (จะกล่าวในข้ อถัดไป) ่ จนกว่าไม่มีข้อมูลเหลือให้ อานได้ อีก ก็จบการวนซํ ้า ่ © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 3. File Operations - 06 Computer Programming using Java 67 5) การอ่ านค่ าข้ อมลด้ วยตัวอ่ านแฟมข้ อมล ตัวอ่านจากแฟ้ มข้ อมูลที่สร้ างขึ ้นสามารถอ่านค่าข้ อมูลประ- ู ้ ู เภทจํานวนเต็ม จํานวนจริ ง และสตริ ง โดยใช้ คําสังและเมท็อดต่อไปนี ้ ่ (1) คําสังอ่านค่าจํานวนเต็มประเภท int โดยใช้ เมท็อด nextInt() ่ int <ชื่อตัวแปร> = <ชื่อตัวอ่าน>.nextInt(); หลังชื่อเมท็อด nextInt()ต้ องตาม ด้ วยวงเล็บเสมอห้ ามลืมเด็ดขาด เช่น int num = in.nextInt(); (2) คําสังอ่านค่าจํานวนจริ งประเภท double โดยใช้ เมท็อด nextDouble() ่ double <ชื่อตัวแปร> = <ชื่อตัวอ่าน>.nextDouble(); เช่น double d = in.nextDouble(); (3) คําสังอ่านค่าข้ อมูลประเภท String ทีละบรรทัด โดยใช้ เมท็อด nextLine() ่ String <ชื่อตัวแปร> = <ชื่อตัวอ่าน>.nextLine(); เช่น String s1 = in.nextLine(); (4) คําสังอ่านค่าข้ อมูลประเภท String ทีละคําหรื อทีละช่วง (แต่ละช่วงคันด้ วยช่องว่างหรื อ t หรื อ n) ่ ่ โดยใช้ เมท็อด next() String <ชื่อตัวแปร> = <ชื่อตัวอ่าน>.next(); เช่น String s2 = in.next(); 6) การปิ ดแฟมข้ อมล เมื่ออ่านข้ อมูลเสร็ จสิ ้นเรี ยบร้ อยแล้ ว จะต้ องทําการปิ ดแฟมข้ อมูลที่อ่านนันเสมอ โดย ้ ู ้ ้ ใช้ เมท็อด close() ซึงมีรูปแบบคําสังดังต่อไปนี ้ ่ ่ <ชื่อตัวอ่าน>.close(); เช่น in.close(); 7) ตัวอย่ างการเขียนโปรแกรมเปิ ดอ่ านแฟมข้ อมลแบบครบทุกขันตอน ้ ู ้ 1 import java.util.Scanner; 2 import java.io.*; ชื่อแฟมข้ อมูลนี ้เป็ นการเรี ยกชื่อแบบ Full Path ้ 3 public class Test { 4 public static void main(String[] args) throws IOException { 5 Scanner in = new Scanner(new File("d:/cu/student.dat")); 6 int i = 1; 7 while(in.hasNext()) { เปิ ดอ่านแฟมข้ อมูลที่ชื่อ student.dat ้ 8 String s = in.nextLine(); 9 System.out.println(i + " : " + s); 10 i++; 11 } หมายเลขบรรทัด วนอ่านข้ อมูลทีละบรรทัดจากแฟมข้ อมูลแล้ วแสดง ้ 12 in.close(); 13 } ผลลัพธ์ของแต่ละบรรทัดที่อานได้ ขึ ้นบนจอภาพ ่ 14 } ปิ ดแฟมข้ อมูล ้ © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 4. 68 Computer Programming using Java 06 - File Operations โจทย์ ข้อที่ 1 [ระดับง่ าย] จงแสดงผลลัพธ์ จากส่ วนของโปรแกรมต่ อไปนีตามคําสั่งที่ระบุ (12 คะแนน) ้ 1 Scanner in = new Scanner(new File("test.txt")); test.txt 2 while (in.hasNext()) { 1 2 3 3 ํ ่ั System.out.println( ระบุคาสง ); 4 4 } 5 6 5 in.close(); 7.0 8 9D 0 in.nextInt() in.nextDouble() in.nextLine() in.next() จํานวนรอบของ while จํานวนรอบของ while จํานวนรอบของ while จํานวนรอบของ while โจทย์ ข้อที่ 2 [ระดับง่ าย] จงเขียนโปรแกรมภาษาจาวาที่สมบรณ์ เพื่ออ่ านแฟมข้ อมลที่ช่ ือ data.txt ซึ่ง ู ้ ู ภายในเก็บข้ อมลที่เป็ นข้ อความจํานวนหนึ่ งที่ไม่ ทราบจํานวนบรรทัดที่แน่ ชัด แล้ วทําการนั บจํานวน ู บรรทัด (Number of Lines) ทังหมดที่ปรากฎอย่ ูในแฟมข้ อมลนัน พร้ อมทังแสดงผลลัพธ์ ท่ ีได้ ออกทาง ้ ้ ู ้ ้ จอภาพ (10 คะแนน) © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 5. File Operations - 06 Computer Programming using Java 69 โจทย์ ข้อที่ 3 [ระดับง่ าย] จงเขียนโปรแกรมภาษาจาวาที่สมบรณ์ เพื่ออ่ านแฟมข้ อมลที่ช่ ือ data.txt ซึ่ง ู ้ ู ภายในเก็บข้ อมลที่เป็ นข้ อความจํานวนหนึ่งที่ไม่ ทราบจํานวนบรรทัดที่แน่ ชัด แล้ วทําการนับจํานวนคํา ู (Number of Words) ทังหมดที่ปรากฎอย่ ูในแฟมข้ อมลนัน พร้ อมทังแสดงผลลัพธ์ ท่ ีได้ ออกทางจอภาพ ้ ้ ู ้ ้ (10 คะแนน) โจทย์ ข้อที่ 4 [ระดับง่ าย] จงเขียนโปรแกรมภาษาจาวาที่สมบรณ์ เพื่ออ่ านแฟมข้ อมลที่ช่ ือ data.txt ซึ่ง ู ้ ู ภายในเก็บข้ อมลที่เป็ นข้ อความจํานวนหนึ่ งที่ไม่ ทราบจํานวนบรรทัดที่แน่ ชัด แล้ วทําการนั บจํานวน ู อักขระ (Number of Characters) ทังหมดที่ปรากฎอย่ ูในแฟมข้ อมลนัน โดยอักขระในที่นีอาจจะเป็ น ้ ้ ู ้ ้ ตัวอักษร ตัวเลข หรื อ สัญลักษณ์ ต่างๆ ก็ได้ พร้ อมทังแสดงผลลัพธ์ ท่ ได้ ออกทางจอภาพ (10 คะแนน) ้ ี © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 6. 70 Computer Programming using Java 06 - File Operations โจทย์ ข้อที่ 5 [ระดับปานกลาง] จงเขียนโปรแกรมภาษาจาวาให้ สมบรณ์ เพื่ออ่ านแฟมข้ อมล student. ู ้ ู txt ซึ่งเป็ นแฟมข้ อมลที่เก็บรายชื่อนิสิตที่ลงทะเบียนเรี ยนรายวิชา 2110191 Innovative Thinking เพื่อ ้ ู ตรวจนั บ ว่ ามีนิสิตคณะวิศวกรรมศาสตร์ ท่ ีลงทะเบียนในวิชานี จํานวนกี่คน โดยภายในแฟมมีรู ปแบบ ้ ้ ข้ อมลตามดังตัวอย่ างข้ างล่ างนี ้ (10 คะแนน) ู student.txt ตัวอย่ างการแสดงผลบนจอภาพ 1. Wongyos Keardsri 5271822821 Engineering Students: 2 2. Wannaporn Yim-ngam 5330023422 3. Ong-ard Rutsamee 5230586021 ... หมายเหตุ ตัวเลขสองหลักสุดท้ ายของเลขประจําตัวนิสิตคือรหัสคณะซึ่งรหัสของคณะวิศวะฯ คือ 21 import java.util.Scanner; import java.io.*; public class CountEngStudent { public static void main(String[] args) throws IOException { } //End of main } //End of class โจทย์ ข้อที่ 6 [ระดับปานกลาง] จงเขียนโปรแกรมภาษาจาวาให้ สมบรณ์ เพื่ออ่ านแฟมข้ อมล score.txt ู ้ ู ซึ่งประกอบด้ วยเลขประจําตัวนิสิต คะแนนรวมสุทธิ (เต็ม 100 คะแนน) และรหัสคณะ เพื่อคํานวณหาผล การเรียนของนิสิตแต่ ละคนและแสดงผลลัพธ์ ออกทางจอภาพตามตัวอย่ างต่ อไปนี ้ โดยถ้ านิสิตได้ คะแนน ตังแต่ 60 คะแนนขึนไปจะได้ ผลการเรี ยนเป็ น “S” แต่ ถ้าตํ่ากว่ านันได้ ผลการเรียนเป็ น “U” (10 คะแนน) ้ ้ ้ score.txt ตัวอย่ างการแสดงผลบนจอภาพ 5330000221 45.23 21 1. 5330000221 U 5330000320 72.45 20 2. 5330000320 S 5330000421 91.11 21 3. 5330000421 S 5330000521 38.20 21 4. 5330000521 U 5330000622 60.00 22 5. 5330000622 S ... ... import java.util.Scanner; import java.io.*; public class StudentGrade { public static void main(String[] args) throws IOException { © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 7. File Operations - 06 Computer Programming using Java 71 } //End of main } //End of class โจทย์ ข้อที่ 7 [ระดับยาก] ฝ่ ายวัดผลและประเมินผลของสํานักทะเบียนจุฬาลงกรณ์ มหาวิทยาลัยได้ ส่ง แฟมข้ อมลชื่อ student.dat มาให้ กับฝ่ ายพัฒนาโปรแกรมของบริ ษัทลานเกียร์ จํากัด ซึ่งประกอบไป ้ ู ด้ วยข้ อมลของนิสิตดังนี ้ เลขประจําตัว ชื่อ นามสกุล และ ผลการเรี ยนเฉลี่ย โดยถกบันทึกไว้ ในรปแบบ ู ู ู ตามที่ปรากฎ ซึ่งฝ่ ายพัฒนาฯ จะต้ องเขียนโปรแกรมภาษาจาวาเพื่ออ่ านแฟมข้ อมลดังกล่ าวแล้ วนํามา ้ ู ประมวลผลดังรายการต่ อไปนี ้ (15 คะแนน) student.dat 1) คํานวนหาชันปี ปั จจุบนของนิสิตแต่ ละคน เช่ น 5330000121 คือ 1st ้ ั 4830000121 preecha 2) เปลี่ยนชื่อนิสิตให้ เหลือเพียง 1 ตัวอักษรย่ อ โดยใช้ อักษรตัวแรกของชื่อ Lerdsirikul เต็มของนิสิตแต่ ละคน เช่ น Preecha จะได้ เป็ น P. หรื อ wongyos จะได้ 1.99 5230000221 เป็ น W. โดยที่อกษรย่ อต้ องเป็ นอักษรพิมพ์ ใหญ่ เท่ านัน ั ้ Suwaraporn Chokkhoukhang 3) แสดงสถานะการเรี ยนของนิ สิตแต่ ละคน โดยถ้ ามีผลการเรี ยนตังแต่ 2.02 ้ 5330000321 2.00 ขึนไปให้ แสดงสถานะว่ า “Pass” ถ้ าอย่ ูระหว่ าง 1.00–2.00 ให้ แสดง Ruksajai ้ Suksawatdee สถานะว่ า “Critical” ถ้ าตํ่ากว่ า 1.00 ให้ แสดงสถานะว่ า “Retired” 0.56 4) แสดงข้ อมลของนิสิตแต่ ละคนให้ อย่ ูภายในบรรทัดเดียวกันดังตัวอย่ าง ... ู ต่ อไปนี ้ 1. 4830000121 6th P. Lerdsirikul 1.99 Critical 2. 5230000221 2nd S. Chokkhoukhang 2.02 Pass 3. 5330000321 1st R. Suksawatdee 0.56 Retired ... import java.util.Scanner; import java.io.*; public class StudentInfoFromFile { public static void main(String[] args) throws IOException { © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 8. 72 Computer Programming using Java 06 - File Operations } //End of main } //End of class โจทย์ ข้อที่ 8 [ระดับยาก] จงเขียนโปรแกรมภาษาจาวาที่สมบรณ์ เพื่อนับคําว่ า “love” จากแฟมข้ อมล ู ้ ู song.txt โดยไม่ สนใจอักษรพิมพ์ ใหญ่ และอักษรพิมพ์ เล็ก ซึ่งกําหนดให้ มีวิธีการนับ 2 วิธีคือ วิธีท่ ีหนึ่ง นับแบบสนใจช่ องว่ างที่แบ่ งคํา (นับทีละคํา) เช่ น “love you my lovely” จะมีคาว่ า “love” 1 คํา และวิธีท่ ี ํ สองนับแบบไม่ สนใจช่ องว่ างที่แบ่ งคํา (เอาช่ องว่ างออก) เช่ น “love you my lovely” จะมีคาว่ า “love” 2 คํา ํ พร้ อมทังแสดงผลลัพธ์ ของการนับทังสองวิธีออกทางจอภาพดังตัวอย่ างต่ อไปนี ้ (15 คะแนน) ้ ้ song.txt ตัวอย่ างการแสดงผลบนจอภาพ I Love you all over LOvE java. Count Words #1: 3 I lOVe some lovely friend. Count Words #2: 7 LoveloVe java!!. © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 9. File Operations - 06 Computer Programming using Java 73 โจทย์ ข้อที่ 9 [ระดับยาก] จงเขียนโปรแกรมภาษาจาวาให้ สมบรณ์ เพื่ออ่ านแฟมข้ อมล data1.dat และ ู ้ ู data2.dat ซึ่งเก็บข้ อมลผลการเรี ยนของนิสิตที่ลงทะเบียนรายวิชา 2110101 ภาคการศึกษาต้ น ของปี ู การศึกษา 2552 และปี การศึกษา 2553 ตามลําดับ จากนันให้ คานวนหาจํานวนนิสิตที่ได้ ผลการเรี ยนเป็ น ้ ํ “F” ว่ ามีร้อยละเท่ าไรของนิสิตที่ลงทะเบียนในภาคการศึกษานันๆ และแสดงผลว่ าปี การศึกษาใดที่มีนิสิต ้ ได้ ผลการเรียนเป็ น “F” มากกว่ ากัน (15 คะแนน) data1.dat data2.dat No. Student ID Grade No. Student ID Grade ======================== ======================== 1. 5230000121 C+ 1. 5330000121 F 2. 5230000221 A 2. 5330000221 F 3. 5230000321 B+ 3. 5330000321 F 4. 5230000421 F 4. 5330000421 D+ 5. 5230000521 B 5. 5330000521 A ... ... import java.util.Scanner; import java.io.*; public class FComparison { public static void main(String[] args) throws IOException { © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 10. 74 Computer Programming using Java 06 - File Operations } //End of main } //End of class 2. ขันตอนการเขียนแฟมข้ อมล ้ ้ ู การเขี ยนแฟ้ มข้ อมูลในภาษาจาวาสามารถทํ าได้ ห ลายวิธี เ ช่น เดีย วกับ การอ่านแฟ มข้ อมูล แต่ใ นบทนี จะ ้ ้ นําเสนอการเขียนแฟ้ มข้ อมูลด้ วยคลาส PrintStream โดยมีขนตอนต่างๆ ดังต่อไปนี ้ ั้ 1) การนําเข้ าคลาส PrintStream ก่อนการเปิ ดเขียนแฟ้ มข้ อมูลจะต้ องนําเข้ าคลาส PrintStream ซึงอยู่ใน ่ แพ็คเก็จ java.io ก่อนเสมอ โดยใช้ คําสัง import java.io.*; ซึงระบุไว้ ก่อนเขียนหัวคลาส โดยปฏิบติ ่ ่ ั เช่นเดียวกับการเปิ ดอ่านแฟ้ มข้ อมูล 2) การตรวจสอบความผิดพลาดในการเปิ ดเขียนแฟมข้ อมล เมท็อดใดก็ตามที่เป็ นเมท็อดสําหรับเปิ ด ้ ู เขียนแฟ้ มข้ อมูล จะต้ องมีการระบุสวนของคําสัง throws IOException ไว้ ตอนท้ ายของหัวเมท็อดนัน ่ ่ ้ เสมอ ซึงปฏิบตเิ ช่นเดียวกับการเปิ ดอ่านแฟ้ มข้ อมูล เพื่อให้ ระบบตรวจสอบข้ อผิดพลาด ่ ั © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 11. File Operations - 06 Computer Programming using Java 75 3) การสร้ างตัวเขียนจากแฟมข้ อมล เป็ นการกําหนดชื่อตัวเขียนเพื่อใช้ สําหรับเขียนข้ อมูลต่างๆ ลงไปใน ้ ู แฟมข้ อมูล โดยจะสร้ างเพียงครังเดียวเท่านัน และจะใช้ งานตัวเขียนนันตลอดทังโปรแกรม ซึงมีคําสังดังนี ้ ้ ้ ้ ้ ้ ่ ่ PrintStream <ชื่อตัวเขียน> = new PrintStream(new File("<ชื่อแฟมข้ อมูล>")); ้ 1 import java.util.Scanner; 2 import java.io.*; 3 public class Test { 4 public static void main(String[] args) throws IOException { 5 PrintStream out = new PrintStream(new File("data.txt")); 6 ... 7 8 } ตัวเขียนแฟมข้ อมูลชื่อว่า out ้ เปิ ดเขียนแฟมข้ อมูลที่ชื่อ data.txt ้ } 4) การเขียนข้ อมลด้ วยตัวเขียนแฟมข้ อมล ตัวเขียนแฟ้ มข้ อมูลที่สร้ างขึ ้นสามารถเขียนข้ อมูลประเภท ู ้ ู จํานวนเต็ม จํานวนจริง และสตริ ง โดยใช้ คําสังและเมท็อดต่อไปนี ้ ่ 1) คําสังเพื่อเขียนข้ อมูลลงในแฟ้ มข้ อมูลทีละบรรทัดแต่ไม่มีการขึ ้นบรรทัดใหม่ ่ <ชื่อตัวเขียน>.print(<ข้ อมูล>); ทํางานคล้ ายกับคําสัง ่ System.out.print(…); เช่น out.print("Start New File"); 2) คําสังเพื่อเขียนข้ อมูลลงในแฟ้ มข้ อมูลทีละบรรทัดพร้ อมทังขึ ้นบรรทัดใหม่ ่ ้ <ชื่อตัวเขียน>.println(<ข้ อมูล>); ทํางานคล้ ายกับคําสัง ่ System.out.println(…); เช่น out.println("Start New File"); 5) การปิ ดแฟมข้ อมล เมื่อเขียนข้ อมูลเสร็ จสิ ้นเรี ยบร้ อยแล้ ว จะต้ องทําการปิ ดแฟมข้ อมูลที่เขียนนันเสมอ ้ ู ้ ้ โดยใช้ เมท็อด close()ซึงปฏิบตเิ ช่นเดียวกับการอ่านแฟ้ มข้ อมูล ่ ั 6) ตัวอย่ างการเขียนโปรแกรมเปิ ดเขียนแฟมข้ อมลแบบครบทุกขันตอน ้ ู ้ 1 import java.util.Scanner; 2 import java.io.*; ถ้ าต้ องการรับค่าจากแปนพิมพ์ ก็ต้องมีคําสังนี ้ด้ วย ้ ่ 3 public class Test { 4 public static void main(String[] args) throws IOException { 5 PrintStream out = new PrintStream(new File("data.dat")); 6 for(int i = 1; i <= 10; i++) { 7 out.println("Line #" + i); 8 } วนเขียน (บันทึก) ข้ อมูลลงไปในแฟมข้ อมูลทีละ ้ 9 out.close(); 10 } ปิ ดแฟมข้ อมูล ้ บรรทัด โดยจะไม่มีผลลัพธ์แสดงที่จอภาพ แต่ 11 } ผลลัพธ์จะแสดงอยูภายในแฟ้ มข้ อมูลแทน ่ โจทย์ ข้อที่ 10 [ระดับง่ าย] จงเขียนโปรแกรมภาษาจาวาที่สมบรณ์ เพื่อรั บประโยคจากแปนพิมพ์ ทละประ- ู ้ ี โยค แล้ วบันทึกลงในแฟมข้ อมลที่ช่ ือ sentence.txt โดยไม่ ต้องแสดงผลลัพธ์ บนจอภาพ ซึ่งจะวนรั บ ้ ู ประโยคไปเรื่อยๆ จนกว่ าจะพิมพ์ ประโยคว่ า “Stop” ก็จะจบการวนซํา (10 คะแนน) ้ © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
  • 12. 76 Computer Programming using Java 06 - File Operations โจทย์ ข้อที่ 11 [ระดับยาก] จงเขียนโปรแกรมภาษาจาวาที่สมบรณ์ เพื่ออ่ านแฟมข้ อมล text.txt แล้ วทํา ู ้ ู การกลับข้ อความหรื อประโยคที่ปรากฏอย่ ูในแฟมข้ อมลทีละบรรทัด เช่ น We love java จะได้ เป็ น ้ ู avaj evol eW เป็ นต้ น พร้ อมทังเก็บผลลัพธ์ ท่ ได้ ไว้ ในแฟมข้ อมล revtext.txt (15 คะแนน) ้ ี ้ ู text.txt revtext.txt We love java avaj evol eW Java is my first programming and dna gnimmargorp tsrif ym si avaJ Java is my last programming gnimmargorp tsal ym si avaJ ... ... © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้