- Bài 1: Tổng quan ngôn ngữ Java
- Bài 2: Hướng dẫn cài đặt và cấu hình Java
- Bài 3: Hướng dẫn cài đặt và cấu hình Intellij IDEA trên Window
- Bài 4: Tạo Project và làm quen với Intelij IDEA
- Bài 5: Cú pháp và quy tắc cơ bản trong Java
- Bài 6: Các kiểu dữ liệu trong Java
- Bài 7: Các kiểu biến trong Java
- Bài 8: Toán tử trong Java
- Bài 9: Hệ thống Unicode trong Java
- Bài 10: Các kiểu vòng lặp
- Bài 11: Câu lệnh điều khiển rẽ nhánh
- Bài 12: Câu lệnh Break, Continue trong Java
- Bài 13: Lớp và đối tượng
- Bài 14: Tính chất của lập trình hướng đối tượng trong Java
- Bài 15: Abstract class và Interface trong Java
- Bài 16: Từ khóa super và this trong Java
- Bài 17: Từ khóa static và final trong Java
- Bài 18: Mảng (Array) trong Java
- Bài 19: Package trong Java
- Bài 21: String trong Java
- Bài 22: StringBuffer và StringBuilder
- Bài 23: Tổng quan về File và I/O
- Bài 24: Xử lý nhập xuất bằng Byte Stream và Character Stream
- Bài 25: Thao tác với tệp và thư mục trong Java
- Bài 26: Tổng quan về Collection trong Java
- Bài 27: Những Interface phổ biến trong Java Collection Framework
- Bài 28: Những Class được triển khai dựa trên Interface của Java Collection
- Bài 29: Khái niệm xử lý ngoại lệ trong Java
- Bài 30: Hướng dẫn xử lý ngoại lệ trong Java
- Bài 31: Đa luồng trong Java
- Bài 32: Thread synchronization trong Java
- Bài 33: Tổng quan về Java AWT
- Bài 34: Container trong Java AWT
- Bài 35: Component trong Java AWT
- Bài 36: Layout Manager trong Java AWT
- Bài 37: Xử lý sự kiện trong Java AWT
- Bài 38: Tổng quan về Java Swing
- Bài 39: Container trong Java Swing
- Bài 40: Component trong Java Swing
- Bài 41: Layout trong Java Swing
- Bài 42: Event trong Java Swing
- Bài 43: Menu trong Java Swing
- Bài 44: Kết nối cơ sở dữ liệu với thư viện JDBC trong Java
Bài 24: Xử lý nhập xuất bằng Byte Stream và Character Stream - Lập trình Java cơ bản
Đăng bởi: Admin | Lượt xem: 3711 | Chuyên mục: Java
1. FileInputStream và FileOutputStream (Byte Stream)
Lớp FileInputStream trong java đọc được các byte từ một input file. Nó được sử dụng để đọc dữ liệu theo định dạng byte (các byte stream) như dữ liệu hình ảnh, âm thanh, video vv. Bạn cũng có thể đọc các dữ liệu có định dạng ký tự. Tuy nhiên, để đọc các dòng ký tự (các character stream), bạn nên sử dụng lớp FileReader.
Lớp FileOutputStream là một output stream được sử dụng để ghi dữ liệu vào một file theo định dạng byte (byte stream). Sử dụng lớp FileOutputStream trong java, nếu bạn phải ghi các giá trị nguyên thủy vào một file. Bạn có thể ghi dữ liệu theo định dạng byte hoặc định dạng ký tự thông qua lớp FileOutputStream. Tuy nhiên, đối với các dữ liệu được ghi theo ký tự, sử dụng FileWriter thích hợp hơn FileOutStream.
Ví dụ 1: Đọc và ghi lần lượt từng byte
package com.company;
import java.io.*;
public class Main {
public static void main(String args[])throws IOException {
FileInputStream fis = new FileInputStream("E:/bkitsoftware/input.txt");
FileOutputStream fos = new FileOutputStream("E:/bkitsoftware/output.txt");
int i = -1;
// Đọc lần lượt các byte (8bit) trong luồng và lưu vào biến i
// Khi đọc ra giá trị -1 nghĩa là kết thúc luồng.
while ((i = fis.read()) != -1) {
System.out.println((char) i);
fos.write(i);
}
fis.close();
fos.close();
}
}
Kết quả thu được là file output.txt được tạo và có nội dung giống file input.txt. Trên màn hình console, có kí tự được in từng dòng một là do các byte được đọc 1 cách lần lượt.
B
k
i
t
S
o
f
t
w
a
r
e
Ví dụ 2: Đọc và ghi lần lượt từng byte
Cũng tương tự như ví dụ trên, nhưng lần này chúng ta sẽ đọc cùng lúc 10 byte
package com.company;
import java.io.*;
public class Main {
public static void main(String args[])throws IOException {
FileInputStream fis = new FileInputStream("E:/bkitsoftware/input.txt");
FileOutputStream fos = new FileOutputStream("E:/bkitsoftware/output.txt");
int i = -1;
byte[] bytes = new byte[10];// Đọc 10 byte 1 thời điểm
while ((i = fis.read(bytes)) != -1) {
System.out.println(new String(bytes,0,i));
fos.write(bytes,0,i);
}
fis.close();
fos.close();
}
}
Kết quả thu được đối với file là tương tự, còn đối với màn hình console kết quả là:
BkitSoftwa // 10 bytes đầu tiên
re
2. Sử dụng ByteArrayInputStream & ByteArrayOutputStream (Byte Stream)
Lớp ByteArrayInputStream cho phép một bộ đệm buffer trong bộ nhớ để được sử dụng như là một InputStream. Nguồn input này là một mảng byte.
Lớp ByteArrayOutputStream trong Java tạo một buffer trong bộ nhớ và tất cả dữ liệu được gửi tới stream này được lưu trong buffer.
Ví dụ 1: Sử dụng ByteArrayInputStream
package com.company;
import java.io.*;
public class Main {
public static void main(String args[])throws IOException {
byte[] buf = new byte[] { 'b', 'k', 'i', 't', 's', 'o', 'f', 't', 'w', 'a', 'r','e' };
// Create the new byte array input stream
ByteArrayInputStream byt = new ByteArrayInputStream(buf);
int k = 0;
while ((k = byt.read()) != -1) {
// Conversion of a byte into character
char ch = (char) k;
System.out.println("ASCII value of Character is:" + k + " - Special character is: " + ch);
}
}
}
ASCII value of Character is:98 - Special character is: b
ASCII value of Character is:107 - Special character is: k
ASCII value of Character is:105 - Special character is: i
ASCII value of Character is:116 - Special character is: t
ASCII value of Character is:115 - Special character is: s
ASCII value of Character is:111 - Special character is: o
ASCII value of Character is:102 - Special character is: f
ASCII value of Character is:116 - Special character is: t
ASCII value of Character is:119 - Special character is: w
ASCII value of Character is:97 - Special character is: a
ASCII value of Character is:114 - Special character is: r
ASCII value of Character is:101 - Special character is: e
Ví dụ 2: Sử dụng ByteArrayOutputStream
package com.company;
import java.io.*;
public class Main {
public static void main(String args[])throws IOException {
FileOutputStream fout1 = new FileOutputStream("E:/bkitsoftware/input1.txt");
FileOutputStream fout2 = new FileOutputStream("E:/bkitsoftware/input2.txt");
ByteArrayOutputStream bout = new ByteArrayOutputStream();
bout.writeTo(fout1);
bout.writeTo(fout2);
bout.flush();
bout.close();
System.out.printlnn");
}
}
Success...
3. Sử dụng DataInputStream và DataOutputStream (Byte Stream)
Lớp DataInputStream trong java cho phép một ứng dụng đọc dữ liệu nguyên thủy từ luồng đầu vào một cách độc lập với máy.
Lớp DataOutputStream trong java cho phép một ứng dụng ghi các kiểu dữ liệu Java nguyên thủy đến output stream một cách độc lập với máy.
Ví dụ 1: Sử dụng DataInputStream
package com.company;
import java.io.*;
public class Main {
public static void main(String args[])throws IOException {
String name = "bkitsoftware";
OutputStream file = new FileOutputStream("E:/bkitsoftware/test.txt");
DataOutputStream data = new DataOutputStream(file);
data.writeUTF(name);
data.flush();
data.close();
}
}
Ta thu được file test.txt có nội dung là "bkitsoftware"
Ví dụ 2: Sử dụng DataOutputStream
package com.company;
import java.io.*;
public class Main {
public static void main(String args[])throws IOException {
InputStream input = new FileInputStream("E:/bkitsoftware/test.txt");
DataInputStream inst = new DataInputStream(input);
String content = inst.readUTF();
System.out.println("Content: " + content);
inst.close();
}
}
Kết quả thu được:
Name: bkitsoftware
Trên đây là 3 stream thường dùng nhất trong Byte Stream, sang bài tiếp theo, chúng ta sẽ tìm hiểu về các stream thường dùng của Character Stream.
4. Sử dụng FileReader và FileWriter (Character Stream)
Lớp FileReader trong java được sử dụng để đọc các dữ liệu theo định dạng ký tự trong một file. Lớp FileWriter trong java được sử dụng để ghi các dữ liệu theo định dạng ký tự vào một file. Chúng ta nên sử dụng 2 lớp này khi thao tác với file ký tự.
Do là Character Stream nên khi sử dụng 2 lớp này, chúng ta không cần chuyển đổi về mảng byte để đọc/ghi.
Do là Character Stream nên khi sử dụng 2 lớp này, chúng ta không cần chuyển đổi về mảng byte để đọc/ghi.
Ví dụ:
package com.company;
import java.io.*;
public class Main {
public static void main(String args[]) {
FileReader in = null;
FileWriter out = null;
try {
in = new FileReader("E:/input.txt");
out = new FileWriter("E:/output.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Kết quả thu được là file output.txt có nội dung tương tự file input.txt.
Trên đây, chúng ta đã tìm hiểu về những stream thường dùng nhất trong xử lý nhập xuất file trong Java, về cơ bản, để đọc file binary( file ảnh, phim...) nên dùng InputStream, còn đọc file text (txt) nên dùng FileReader.
Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!
- Bài 1: Tổng quan ngôn ngữ Java
- Bài 2: Hướng dẫn cài đặt và cấu hình Java
- Bài 3: Hướng dẫn cài đặt và cấu hình Intellij IDEA trên Window
- Bài 4: Tạo Project và làm quen với Intelij IDEA
- Bài 5: Cú pháp và quy tắc cơ bản trong Java
- Bài 6: Các kiểu dữ liệu trong Java
- Bài 7: Các kiểu biến trong Java
- Bài 8: Toán tử trong Java
- Bài 9: Hệ thống Unicode trong Java
- Bài 10: Các kiểu vòng lặp
- Bài 11: Câu lệnh điều khiển rẽ nhánh
- Bài 12: Câu lệnh Break, Continue trong Java
- Bài 13: Lớp và đối tượng
- Bài 14: Tính chất của lập trình hướng đối tượng trong Java
- Bài 15: Abstract class và Interface trong Java
- Bài 16: Từ khóa super và this trong Java
- Bài 17: Từ khóa static và final trong Java
- Bài 18: Mảng (Array) trong Java
- Bài 19: Package trong Java
- Bài 21: String trong Java
- Bài 22: StringBuffer và StringBuilder
- Bài 23: Tổng quan về File và I/O
- Bài 24: Xử lý nhập xuất bằng Byte Stream và Character Stream
- Bài 25: Thao tác với tệp và thư mục trong Java
- Bài 26: Tổng quan về Collection trong Java
- Bài 27: Những Interface phổ biến trong Java Collection Framework
- Bài 28: Những Class được triển khai dựa trên Interface của Java Collection
- Bài 29: Khái niệm xử lý ngoại lệ trong Java
- Bài 30: Hướng dẫn xử lý ngoại lệ trong Java
- Bài 31: Đa luồng trong Java
- Bài 32: Thread synchronization trong Java
- Bài 33: Tổng quan về Java AWT
- Bài 34: Container trong Java AWT
- Bài 35: Component trong Java AWT
- Bài 36: Layout Manager trong Java AWT
- Bài 37: Xử lý sự kiện trong Java AWT
- Bài 38: Tổng quan về Java Swing
- Bài 39: Container trong Java Swing
- Bài 40: Component trong Java Swing
- Bài 41: Layout trong Java Swing
- Bài 42: Event trong Java Swing
- Bài 43: Menu trong Java Swing
- Bài 44: Kết nối cơ sở dữ liệu với thư viện JDBC trong Java