1.1 Khái niệm
Luồng đơn giản là một lộ trình mà dữ liệu sẽ di chuyển giữa chương trình và các thiết bị nhập xuất, nó là một sự biểu diễn trừu tượng (cấu trúc dữ liệu, lớp) để dữ liệu có thể trao đổi giữa chương trình và các thiết bị vật lý.
Trong java, luồng được thiết kế thành nhiều lớp những tất cả chúng được dẫn xuất ra từ hai lớp trừu tượng đó là InputStream và OutputStream trong gói java.io. Có hai loại luồng trong java đó là luồng ký tự và luồng bytes. Tất cả các task liên quan đến các lớp nhập xuất trong java nếu có lỗi sẽ quăng ra một IOException.1.2 Những lớp Ouput stream
OutputStream là lớp trừu tượng và cơ bản nhất để tất cả các lớp xử lý luồng xuất byte kế thừa.Nó có 3 phương thức chính là:- write ghi những byte dữ liệu tới luồng xuất
- flush xả luồng để tất cả các vùng nhớ (buffer) của luồng trong trạng thái trống sẵn sàng cho việc ghi
- close đóng luồng xuất và giải phóng tất cả tài nguyên hệ thống liên quan đến luồng xuất này
Một số hàm căn bản của lớp này:
- toByteArray lấy dữ liệu từ stream trong một mảng byte
- toString lấy dữ liệu từ stream trong một chuỗi
- size lấy kích của buffer hiện tại trong stream
- reset chuyển buffer về trạng thái rỗng (count=0).
- writeTo ghi dữ liệu tới một stream khác
Ví dụ:
public static void main(String[] args) throws IOException {ByteArrayOutputStream f = new ByteArrayOutputStream();String s = "ByteArrayOutputStream";byte buf[] = s.getBytes(); //get byte array from string
f.write(buf); //write data to streamSystem.out.println(f.toString()); //get data from stream and print to screen
byte[] b = f.toByteArray(); //get data in byte arrayfor (int i = 0; i < b.length; i++) {System.out.print((char) b);//print characters to screen}
OutputStream f2 = new FileOutputStream("output.txt");//create a FileOutputStreamf.writeTo(f2); //write data to other stream
f2.close(); //close streamf.close(); //close stream}
Kết quả:
ByteArrayOutputStream
ByteArrayOutputStream
Và một tập tin là “output.txt” được tạo ra trong thư mục project với nội dung ByteArrayOutputStream
BufferedOutputStream kế thừa từ lớp FilterOutputStream, nó dùng để hỗ trợ việc ghi dữ liệu trong vùng đệm nhằm cải tiến performance khi ghi dữ liệu.
DataOutputStream giúp ứng dụng ghi những kiểu dữ liệu cơ bản (primitive types) như boolean, int, float,… tới stream. Lớp này sinh ra nhằm giúp dễ dàng hơn trong việc ghi dữ liệu có nhiều kiểu như số nguyên, số thực, ký tự…
FileInputStream dùng để đọc byte dữ liệu từ một tập tin trong ổ đĩa.
Ví dụ đọc một file tên là “output.txt” trong cùng thư mục project, đọc lần lượt từng ký tự cho đến khi hết file.
BufferedInputStream là một lớp kế thừa từ lớp FilterInputStream, nó dùng để hỗ trợ việc đọc dữ liệu trong vùng đệm nhằm cải tiến performance khi đọc dữ liệu.
DataInputStream là lớp kế thừa từ filterInputStream, nó giúp ứng dụng đọc dữ liệu có kiểu là các kiểu nguyên thủy (primitive types) như int, float, boolean, …
ByteArrayOutputStream
Và một tập tin là “output.txt” được tạo ra trong thư mục project với nội dung ByteArrayOutputStream
BufferedOutputStream kế thừa từ lớp FilterOutputStream, nó dùng để hỗ trợ việc ghi dữ liệu trong vùng đệm nhằm cải tiến performance khi ghi dữ liệu.
DataOutputStream giúp ứng dụng ghi những kiểu dữ liệu cơ bản (primitive types) như boolean, int, float,… tới stream. Lớp này sinh ra nhằm giúp dễ dàng hơn trong việc ghi dữ liệu có nhiều kiểu như số nguyên, số thực, ký tự…
1.3 Những lớp Input stream
InputStream là một lớp trừu tượng dùng để các lớp xử lý nhập byte dữ liệu kế thừa. InputStream có các hàm sau:- available trả về số lượng byte có thể được đọc từ inputStream này
- read đọc byte dữ liệu kế tiếp từ input stream
- mark đánh dấu vị trí hiện tại trong input stream
- skip không đọc n byte dữ liệu từ input stream
- reset khởi động lại việc đọc từ vị trí trong phương thức mark
- close đóng input stream là giải phóng toàn bộ tài nguyên hệ thống liên quan đến stream này
FileInputStream dùng để đọc byte dữ liệu từ một tập tin trong ổ đĩa.
Ví dụ đọc một file tên là “output.txt” trong cùng thư mục project, đọc lần lượt từng ký tự cho đến khi hết file.
public static void main(String[] args) throws IOException {File file = new File("output.txt");StringBuffer strContent = new StringBuffer("");int character;Kết quả là in ra nội dung file, ví dụ: content of file: ByteArrayOutputStream
try {FileInputStream f = new FileInputStream(file);
/*read byte until finish file*/while( (character = f.read()) != -1) {strContent.append((char)character);}
f.close();} catch (FileNotFoundException e) {System.out.println("File " + file.getAbsolutePath() + " could not be found on FileSystem");} catch (IOException e) {System.out.println("Error during read file " + e);}
System.out.println("content of file: " + strContent);}
BufferedInputStream là một lớp kế thừa từ lớp FilterInputStream, nó dùng để hỗ trợ việc đọc dữ liệu trong vùng đệm nhằm cải tiến performance khi đọc dữ liệu.
DataInputStream là lớp kế thừa từ filterInputStream, nó giúp ứng dụng đọc dữ liệu có kiểu là các kiểu nguyên thủy (primitive types) như int, float, boolean, …
1.4 Những lớp Reader và Writer
Những lớp thuộc nhóm Reader và Writer dùng để giúp việc nhập xuất các luồng ký tự (character) giữa ứng dụng và các thiết bị vật lý.- Các lớp Reader: Reader, BufferedReader, CharArrayReader, FilterReader, InputStreamReader, StringReader, PipedReader, FileReader, LineNumberReader, PushBackReader
- Các lớp Writer: Writer, BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, FileWriter, PipedWriter, PrinterWriter, StringWriter, File, RandomAccessFile, FileDescriptor, FilePermission, StreamTokenizer
Reader có các phương thức:
• read đọc dữ liệu từ luồng (có thể đọc một ký tự, nhiều ký tự, hoặc đọc tất cả các ký tự)• ready kiểm tra luồng đã sẵng sàng cho việc đọc• mark đánh dấu• skip hủy bỏ đọc các ký tự• reset reset lại luồngWriter có các phương thức
• append chèn thêm ký tự hoặc chuỗi ký tự vào luồng• write ghi dữ liệu vào luồng• flush xóa dữ liệu trong luồng, đưa các buffer về trạng thái trống sẵn sàng cho việc ghi dữ liệu• close đóng luồngVí dụ đọc một lần cả file dùng BufferedReader rồi in ra màn hình như sau:
File file = new File("output.txt");BufferedReader br = new BufferedReader(new FileReader(file));String str;
while ((str = br.readLine()) != null) {System.out.println(str);}
br.close();
Ví dụ ghi 2 chuỗi vào file với mỗi chuỗi nằm trên những dòng mới.
String str = "Nguyen Anh Kien";String str1 = "Luvina software JSC, 1001 Hoang Quoc Viet, Cau Giay, Ha Noi";Kết quả file output.txt là:
File file = new File("output.txt");BufferedWriter fw = new BufferedWriter(new FileWriter(file));
fw.write(str);fw.newLine();fw.write(str1);fw.close();
Nguyen Anh KienLuvina software JSC, 1001 Hoang Quoc Viet, Cau Giay, Ha Noi
1.5 Thao tác với tập tin và thư mục
File (java.io.File) là lớp giúp ứng dụng java thao tác với tập tin và thư mục trong hệ thống. Một số hàm của lớp này như:• isFile kiểm tra đúng là tập tin hay không? (giúp phân biệt tập tin và thư mục)• isDirectory kiểm tra phải thư mục• exists kiểm tra tập tin hay thư mục có tồn tại• canRead kiểm tra quyền đọc của tập tin hay thư mục• canWrite kiểm tra có quyền ghi không• setReadable cài đặt quyền đọc cho tập tin hoặc thư mục• setWritable cài đặt quyền ghi cho tập tin hoặc thư mục• mkdir tạo một thư mục tại đường dẫn đó• renameTo đổi tên tập tin hay thư mục• delete xóa tập tin hoặc thư mục• createNewFile tạo tập tinVí dụ: Đọc thư mục document rồi in ra kết quả đường dẫn của các file
File myDocumentFolder = new File("C:/Documents and Settings/nguyenanhkien/My Documents");Kết quả:
if(myDocumentFolder.exists() && myDocumentFolder.isDirectory() && myDocumentFolder.canRead()) {File[] files = myDocumentFolder.listFiles();for(File f : files) {System.out.println(f);}}
C:\Documents and Settings\nguyenanhkien\My Documents\Default.rdpC:\Documents and Settings\nguyenanhkien\My Documents\desktop.iniC:\Documents and Settings\nguyenanhkien\My Documents\DownloadsC:\Documents and Settings\nguyenanhkien\My Documents\My Chat LogsC:\Documents and Settings\nguyenanhkien\My Documents\My MusicC:\Documents and Settings\nguyenanhkien\My Documents\My PicturesC:\Documents and Settings\nguyenanhkien\My Documents\My Received FilesC:\Documents and Settings\nguyenanhkien\My Documents\tmpNguồn: congdongjava.com - Theo bloger: nguyenanhkien :smug 2:
0 nhận xét:
Đăng nhận xét