Java vs Python read file


java ทำไมมันเยอะแยะไปหมดไม่เข้าใจ

public static String readFile(String filename){
FileReader fr = null;
String result = null;
        try {
            fr = new FileReader(filename);
            BufferedReader reader = new BufferedReader(fr);
            String str;
            StringBuilder builder = new StringBuilder();
            while ((str = reader.readLine()) != null) {
                builder.append(str);
            }
            result = builder.toString();

        } catch (FileNotFoundException ex) {
            Logger.getLogger(MyClass.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(MyClass.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                if(fr != null) {
                    fr.close();
                }
            } catch (IOException ex) {
                Logger.getLogger(MyClass.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
return result;
}

แถมมีหลายทางเลือกน่างง

public static String readFile(String filename) {
 File file = new File(filename);
    FileInputStream fis = null;
    BufferedInputStream bis = null;
    DataInputStream dis = null;
    StringBuilder builder = new StringBuilder();

    try {
      fis = new FileInputStream(file);

      // Here BufferedInputStream is added for fast reading.
      bis = new BufferedInputStream(fis);
      dis = new DataInputStream(bis);

      // dis.available() returns 0 if the file does not have more lines.
      while (dis.available() != 0) {

      // this statement reads the line from the file and print it to
        // the console.
        builder.append(dis.readLine());
      }

      // dispose all the resources after using them.
      fis.close();
      bis.close();
      dis.close();

    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
    return builder.toString();
}

และ rewrite version by @nuboat ง่ายดีนะ

public static String readFile(String filename, StringBuffer result) {
  Scanner scanner = new Scanner(new FileInputStream(“[FileName]“), “[Encoding]“);
  while (scanner.hasNextLine())
    result.append(scanner.nextLine());
  scanner.close();
  return result;
}

ใน python ใน code นี้เห็นว่าไม่มี try catch แต่จริงๆ แล้ว ทุกอย่างทำเสร็จหมดแล้วในคำว่า with นะ

def readFile(filename):
  result = None
  with open(filename) as myFile:
    for line in myFile:
      result += line
  return result
Advertisements

12 thoughts on “Java vs Python read file

  1. ไว้วันที่ต้อง control i/o, buffer, … แล้วจะรู้ว่า ไอ้สามบรรทัดใน python นี่มันนรกมาก

    • ถ้าเป็นเรื่องพวกนั้นก็อย่าไปใช้ ไอ้ 3-4 บรรทัดนั้นสิครับ Assembly น่าจะ control แบบละเอียดได้ดีกว่า แต่สมัยนี้ต้องการ wrapper เพื่อให้อ่านง่ายๆ มากกว่าครับ(ในมุมของผู้ใช้(ภาษาโปรแกรมมิ่ง))

  2. มันก็ดีที่จะดักช่วงใหนก็ได้ แต่ถ้าต้องการอ่านอย่างเดียวก็คงลำบาก หุหุ

    ใน PHP บรรทัดเดียวเอง

    file_get_contents(“filename”);

    ปล. ถ้า file ใหญ่ๆ ใช้อันนี้ ตายห่าเลย 55+ ต้อง fgets เอาเหมือนกัน

  3. Version rewrite 🙂
    public static String readFile(String filename, StringBuffer result) {
    Scanner scanner = new Scanner(new FileInputStream(“[FileName]”), “[Encoding]”);
    while (scanner.hasNextLine())
    result.append(scanner.nextLine());
    scanner.close();
    return result;
    }

      • ก็เขียนโค้ดแบบเดียวกับ python ไง ไม่มีการ catch อะไรทั้งสิ้น
        อย่างโค้ด python ส่วนด้านบนจริงๆ ก็ควร catch แต่ก็ไม่ได้ catch

        ปล. โค้ดคอพไพล์ไม่น่าผ่านแหะ ต้อง throws IOException ด้วย

    • with statement
      ทำ try catch finally ด้วยตัวมันเองให้เรียบร้อยครับ
      ใช้กับพวก i/o ที่ต้องการ .close() เช่น sql , file เป็นต้นครับ

      • ในการทำงานจริงเวลาที่อ่านไฟล์ไม่ได้มันแสดงว่าเกิด Error
        งานที่ต้อง handle มันมากกว่านั้นเยอะเลยครับ ไม่ใช่แค่ handle การเปิดปิด

      • ผมแค่ยกตัวอย่างครับ (- -‘) แต่มันก็ handle Error ต่างๆ ด้วยทั้งหมดนั้นแหละครับ File not found , IOError …

        ถ้าไม่ได้ที่ต้องการ ก็ return default ออกไป

        จะเห็นว่าผมทำเหมือนๆ กันใน java คือไม่จัดการอะไรเลยนอกจากเตรียมค่า default เมื่อไม่ได้ตามที่ต้องการ

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s