1. Kết quả Event Ghost 2016


    Dưới đây là danh sách những thành viên đoạt giải thưởng trong Event Ghost 2016

Vào ra dữ liệu trong Java (Input/Output)

Thảo luận trong 'Java & JSP' bắt đầu bởi No Nguyễn, 15 Tháng tám 2013.


  1. No Nguyễn

    No Nguyễn Admin Ban Quản Trị

    1,408
    2,079
    213
    Tên thật:
    Nguyễn Văn Trung
    Tóm tắt: Ngôn ngữ Java™ cung cấp hầu hết những gì mà các lập trình viên chuyên nghiệp mong đợi đối với một ngôn ngữ lập trình và thậm chí là đối với một ngôn ngữ hướng-đối tượng. Thế nhưng, ngoài những điều căn bản, ngôn ngữ Java còn cung cấp một số công cụ có ích để tạo ra các chương trình tinh vi hơn. Hướng dẫn này sẽ giới thiệu cho bạn một số trong các đặc tính nâng cao hơn này của ngôn ngữ Java thường được thấy trong các dự án phát triển công nghệ Java điển hình.

    1.Các tệp tin (File)
    Lớp File định nghĩa một nguồn tài nguyên trên hệ thống tệp tin của bạn. Nó gây phiền toái, đặc biệt là cho việc kiểm thử, nhưng đó là thực tế mà các lập trình viên Java phải đối phó với nó. Đây là cách bạn khởi tạo một cá thể File:
    Mã:
    File aFile = new File("temp.txt");

    Đoạn mã này tạo ra một cá thể File với đường dẫn temp.txt trong thư mục hiện tại. Chúng ta có thể tạo một File với chuỗi ký tự đường dẫn bất kỳ như mong muốn, miễn là nó hợp lệ. Lưu ý rằng khi có đối tượng File này không có nghĩa là tệp tin mà nó đại diện thực sự tồn tại trên hệ thống tệp tin ở vị trí dự kiến. Đối tượng của chúng ta chỉ đại diện cho một tệp tin thực tế có thể có hoặc có thể không có ở đó. Nếu tệp tin liên quan không tồn tại, chúng ta sẽ không phát hiện ra là có một vấn đề cho đến khi chúng ta cố đọc hay viết vào nó. Đó là một chút khó chịu, nhưng nó có ý nghĩa.
    Ví dụ, chúng ta có thể hỏi xem File của ta có tồn tại hay không:
    Mã:
    aFile.exists();
    Nếu nó không tồn tại, chúng ta có thể tạo nó:
    Mã:
    aFile.createNewFile();
    Khi sử dụng các phương thức khác trên File, chúng ta cũng có thể xóa các tệp tin, tạo các thư mục, xác định xem một tài nguyên trong hệ thống tệp tin là một thư mục hay là một tệp tin, v.v.. Tuy nhiên, hoạt động sẽ thực sự xảy ra, khi chúng ta ghi vào và đọc ra từ tệp tin. Để làm điều đó, chúng ta cần phải hiểu thêm một chút về các luồng.
    2.Các luồng và cách sử dụng

    [​IMG]

    Đọc và viết các tệp tin Có một số cách để đọc ra từ và viết vào một File. Người ta có thể cho rằng cách tiếp cận đơn giản nhất diễn ra như sau:
    Tạo một FileOutputStream trên File để viết vào nó.
    Tạo một FileInputStream trên File để đọc từ nó.
    Gọi read() để đọc từ File và write() để viết vào File.
    Đóng các luồng, dọn dẹp sạch sẽ nếu cần thiết. Các mã có thể trông giống như sau:
    Mã:
    try {
        File source = new File("input.txt");
        File sink = new File("output.txt");
     
        FileInputStream in = new FileInputStream(source);
        FileOutputStream out = new FileOutputStream(sink);
        int c;
     
        while ((c = in.read()) != -1)
          out.write(c);
     
        in.close();
        out.close();         
    } catch (Exception e) {
        e.printStackTrace();
    }        
    Ở đây chúng ta tạo ra hai đối tượng File: một FileInputStream để đọc từ tệp tin nguồn và một FileOutputStream để viết tới File kết quả. (Lưu ý: Ví dụ này đã được điều chỉnh từ ví dụ CopyBytes.java trong Java.sun.com). Chúng ta sau đó đọc vào từng byte của dữ liệu đầu vào và ghi nó vào kết quả đầu ra. Sau khi đã xong, chúng ta đóng các luồng. Có lẽ là khôn ngoan khi đặt một lời gọi close() vào trong khối cuỗi cùng (finally). Tuy nhiên, trình biên dịch của ngôn ngữ Java sẽ còn yêu cầu bạn phải nắm bắt nhiều trường hợp ngoại lệ khác có thể xảy ra, điều này có nghĩa là cần một mệnh đề catch khác nữa nằm trong khối finally của bạn. Có chắc chắn đáng làm không? Có thể. Vậy là bây giờ chúng ta có một cách tiếp cận cơ bản để đọc và viết. Nhưng sự lựa chọn khôn ngoan hơn, và về một vài khía cạnh, sự lựa chọn dễ dàng hơn, là sử dụng một số luồng khác mà chúng ta sẽ thảo luận trong phần tiếp theo.
    3.Các luồng có bộ đệm
    Có một số cách để đọc ra và ghi vào một File, nhưng cách tiếp cận điển hình và thuận tiện nhất diễn ra như sau:
    Tạo một FileWriter trên File.
    Gói FileWriter trong một BufferedWriter.
    Gọi write() trên BufferedWriter mỗi khi cần thiết để viết các nội dung của File, thường ở cuối mỗi dòng cần viết ký tự kết thúc dòng (đó là, \n).
    Gọi flush() trên BufferedWriter để làm rỗng nó.
    Đóng BufferedWriter, dọn dẹp sạch nếu cần thiết.
    Mã:
    try {
        FileWriter writer = new FileWriter(aFile);
        BufferedWriter buffered = new BufferedWriter(writer);
        buffered.write("A line of text.\n");
        buffered.flush();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    Ở đây, chúng ta tạo ra một FileWriter trên aFile, sau đó chúng ta gói nó trong một BufferedWriter. Thao tác viết có bộ đệm hiệu quả hơn là đơn giản viết mỗi lần một byte. Khi chúng ta đã thực hiện viết từng dòng (mà chúng ta tự kết thúc bằng \n), chúng ta gọi flush() trên BufferedWriter. Nếu chúng ta không làm như vậy, chúng ta sẽ không nhìn thấy bất kỳ dữ liệu nào trong tệp tin đích, bất chấp mọi công sức cố gắng viết tệp tin này. Khi chúng ta có dữ liệu trong tệp tin, chúng ta có thể đọc nó bằng các mã tương tự đơn giản:
    Mã:
    String line = null;
    StringBuffer lines = new StringBuffer();
    try {
        FileReader reader = new FileReader(aFile);
        BufferedReader bufferedReader = new BufferedReader(reader);
        while ( (line = bufferedReader.readLine()) != null) {
            lines.append(line);
            lines.append("\n");
        }
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    System.out.println(lines.toString());
    Chúng ta tạo ra một FileReader, sau đó gói nó trong một BufferedReader. Điều đó cho phép chúng ta sử dụng phương thức thuận tiện readLine(). Chúng ta đọc từng dòng cho đến khi không có gì còn lại, viết thêm mỗi dòng vào cuối StringBuffer. của chúng ta. Khi đọc từ một tệp tin, một IOException có thể xảy ra, do đó chúng ta bao quanh tất cả logic đọc tệp tin của chúng ta bằng một khối try/catch.
     
    thanlong2910, gagucool and vtc341 like this.
  2. thanlong2910

    thanlong2910 Member Tích Cực

    120
    26
    28
    hay. Cảm ơn bạn. Post lâu vậy mà ít người quan tâm nhỉ :D
     
    No Nguyễn thích bài này.
  3. No Nguyễn

    No Nguyễn Admin Ban Quản Trị

    1,408
    2,079
    213
    Tên thật:
    Nguyễn Văn Trung

Chia sẻ trang này

Từ khóa tìm kiếm từ Google :

  1. lay du lieu tu bang trong java