byte-stream

- Với cách đọc ghi này ta tạo một luồng Byte gắn với file chỉ định dùng FileInputStream và FileOutputStream.
- Để mở một file, đơn giản chỉ cần tạo một đối tượng của những lớp này, tên file cần mở là thông số trong constructor. Khi file mở, việc đọc và ghi dữ liệu trên file được thực hiện một cách bình thường thông qua các phương thức cung cấp trong luồng.

1, Đọc dữ liệu từ file dùng luồng byte:

- Mở một file để đọc dữ liệu FileInputStream(String fileName) throws FileNotFoundException. Nếu file không tồn tại: thì ném ra FileNotFoundException.
- Đọc dữ liệu: dùng phương thức read():
int read( ) throws IOException: đọc từng byte từ file và trả về giá trị của byte đọc được. Trả về -1 khi hết file, và ném ra IOException khi có lỗi đọc.
- Đóng file: dùng phương thức close():
void close( ) throws IOException: sau khi làm việc xong cần đóng file để giải phóng tài nguyên hệ thống đã cấp phát cho file.

Ví dụ:
PHP:
package javaandroidvn;
 
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;
 
/*
Tạo file androidvn.txt ở ổ E, gõ nội dung văn bản vào đó rồi lưu lại!
Hiển thị nội dung của một file tên androidvn.txt lưu tại E:\androidvn.txt
*/
public class JavaAndroidVn {

    public static 
void main(String args[]) throws IOException {

        
FileInputStream f;
        try {
            
= new FileInputStream("E:\\androidvn.txt");
        } catch (
FileNotFoundException exc) {
            
System.out.println("File Not Found");
            return;
        } catch (
ArrayIndexOutOfBoundsException exc) {
            
System.out.println("Usage: ShowFile File");
            return;
        }

        
// Đọc cho tới cuối file
        
int i;
        do {
            
f.read();
            if (
!= -1) {
                
System.out.print((chari);
            }
        } while (
!= -1);
        
f.close();
    }
}
2. Ghi dữ liệu xuống file dùng luồng byte:

- Mở một file để ghi dữ liệu FileOutputStream(String fileName) throws FileNotFoundException
Nếu file không tạo được: thì ném ra FileNotFoundException
- Ghi dữ liệu xuống: dùng phương thức write():
void write(int byteval) throws IOException: ghi một byte xác định bởi tham số byteval xuống file, và ném ra IOException khi có lỗi ghi.
- Đóng file: dùng phương thức close():
void close( ) throws IOException: sau khi làm việc xong cần đóng file để giải phóng tài nguyên hệ thống đã cấp phát cho file.

Ví dụ: Chương trình sẽ tự tạo file "E:\\output.txt", ghi vào các ký tự từ a -> z
PHP:
package javaandroidvn;
 
import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;

class 
JavaAndroidVn {

    public static 
void main(String args[]) throws IOException {
        
FileOutputStream fout;
 
// Tạo file mới!
        
try {
            
fout = new FileOutputStream("E:\\output.txt");
        } catch (
FileNotFoundException exc) {
            
System.out.println("Error Opening OutputFile ");
            return;
        }
 
// Ghi file theo từng ký tự từ a -> z
        
int i 'a';
        
int j 'z';
        for (
'a'<= ji++) {
            
fout.write(i);
        }
        
fout.close();
    }
}
3, Copy file trong Java:

Dưới đây là 1 chương trình đơn giản để copy file trong Java, nó chưa thực sự tối ưu vì mình thấy tốc độ của nó rất chậm. Bạn có thể dùng để copy bất cứ định dạng nào, không phải chỉ riêng file văn bản! Nó dùng cách đọc ghi file dùng luồng byte như trên!
PHP:
package javaandroidvn;
 
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;

class 
JavaAndroidVn {

    public static 
void main(String args[]) throws IOException {
        
FileInputStream fin;
        
FileOutputStream fout;
        try {
// open input file
            
try {
                
fin = new FileInputStream("E:\\in.mp3");
            } catch (
FileNotFoundException exc) {
                
System.out.println("Input File Not Found");
                return;
            }
 
// open output file
            
try {
                
fout = new FileOutputStream("E:\\out.mp3");
            } catch (
FileNotFoundException exc) {


                
System.out.println("Error Opening OutputFile ");
                return;
            }
        } catch (
ArrayIndexOutOfBoundsException exc) {
            
System.out.println("Usage: CopyFile From To");
            return;
        }
 
// Copy File
        
int i;
        try {
            do {
                
fin.read();
                if (
!= -1) {
                    
fout.write(i);
                }
            } while (
!= -1);
        } catch (
IOException exc) {
            
System.out.println("File Error");
        }
        
fin.close();
        
fout.close();
    }
}
[IMG]

Bài tập về nhà::D

Biến màn hình console thành màn hình lệnh như sau:
- Nếu bạn gõ từ "copy", thì chương trình sẽ hỏi địa chỉ file cần copy, bạn gõ địa chỉ file cần copy vào, nếu không tồn tại sẽ bắt nhập lại, nếu tồn tại sẽ hỏi địa chỉ file đích, sau đó chương trình sẽ copy file đó. Tương tự với các lệnh "move", "delete"
- Gợi ý cách xóa file:
Thêm 2 dòng lệnh như ví dụ này là bạn có thể xóa được 1 file:
PHP:
File f = new File("E:\\in.mp3");f.delete();
** Mình chỉ nêu ý cơ bản bài như vậy, bạn hãy cố gắng làm chương trình thật tốt và tiện lợi với người dùng! Ví dụ nhập lệnh "copy str1 str2" với str1, str2 là đường dẫn nguồn và đích, rồi Enter nó sẽ copy luôn. ;)

1 blogger-facebook:

  1. Cho e hỏi giờ e muốn đọc và ghi file dung lượng lớn thì phải làm như thế nào ak???

    ReplyDelete

 
Top