JDK提供的流繼承了四大類:InputStream(字節輸入流)、OutputStream(字節輸出流)、Reader(字符輸入流)、Writer(字符輸出流)。
字符流和字節流的主要區別:
1.字節流讀取的時候,讀到一個字節就返回一個字節; 字符流使用了字節流讀到一個或多個字節(中文對應的字節數是兩個,在UTF-8碼表中是3個字節)時。先去查指定的編碼表,將查到的字符返回。
2.字節流可以處理所有類型數據,如:圖片,MP3,AVI視頻文件,而字符流只能處理字符數據。
只要是處理純文本數據,就要優先考慮使用字符流,除此之外都用字節流。
詳解如下:
一、字節流講解
1.用流對文件進行處理
package com.chen.test;
import java.io.*;
/**
*
* @author 陳家小帥
*
*/
public class TestIO {
public static void main(String[] args) {
File file = new File("E:/java.txt");
if (!file.exists()) { //先判斷該目錄文件是否存在
try {
//file.mkdirs(); 創建該目錄下指定的文件夾
file.createNewFile(); // 當文件不存在時,創建此文件夾
} catch (Exception e) {
e.printStackTrace();
}
}
//file.delete(); //刪除指定的文件
System.out.println("文件名:"+file.getName());
}
}
2. InputStream 和 OutputStream 是兩個 abstact 類,對於字節為導向的 stream 都擴展這兩個基類;
inputStream中的關鍵方法:
read():方法是讀取一個byte字節,但是返回的是int。
read(byte[]):一次性讀取內容到緩沖字節數組
read(byte[],int,int):從數據流中的哪個位置offset開始讀長度為len的內容到緩沖字節數組
OutputStream中的關鍵方法
write(int):寫入一個字節到stream中
write(byte[])寫入一個byte數組到stream中
write(byte[],int,int):把byte數組中從開始處寫入長度為len的數據
flush():這個方法是用來刷新stream中的數據,讓緩沖區中的數據強制的輸出
3.FileInputStream和FileOutputStream
FileInputStream : 從文件系統中的某個文件中獲得輸入字節.
FileOutputStream : 文件輸出流是用於將數據寫入 File 或 FileDescriptor 的輸出流.
下面是一個例子:
package com.chen.test;
import java.io.*;
/**
*
* @author 陳家小帥
*
*/
public class Test4 {
public static void main(String[] args) throws Exception {
String path1 = "E:/WorkSpace/Mouth/bin/Dest.txt";
String path2 = "E:/WorkSpace/Mouth/bin/D.txt";
ReadByFIS(path1, path2);
}
/**
* 使用FileInputStream 將一個文件的內容寫入到另一個文件中,並在控制台輸出
*
* @param path1
* @param path2
* @throws Exception
*/
public static void ReadByFIS(String path1, String path2) throws Exception {
InputStream in = new FileInputStream(path1); //創建文件輸入流
OutputStream out = new FileOutputStream(path2); //創建文件輸出流
byte[] buffer = new byte[1024]; //定義字節數組
int len = 0;
while ((len = in.read(buffer)) > 0) { //將最多buffer.lenth個字節的數據讀入byte數組中
String s = new String(buffer, 0, len); //將讀入的字節轉換成String類型
System.out.println(s); //輸出讀取到的信息
out.write(buffer, 0, len); //將讀取到的信息寫入到文件中
}
out.close(); //關閉輸入輸出流
in.close();
}
}
輸出結果如下:
如果想讓某個字符串寫入到文件中,如下所示:
package com.chen.Two;
import java.io.*;
public class Two {
// 編寫一個Java程序將111,112,113,114,115 這5個數以寫入到Dest.txt文件中
public static void main(String[] args) throws Exception {
String str = "111,112,113,114,115"; //定義字符串
FileOutputStream fo = new FileOutputStream("E:/WorkSpace/Mouth/bin/Dest.txt"); //創建文件輸出流
int len = 0 ;
byte[] buffer = str.getBytes(); //將字符串轉換成byte字節
fo.write(buffer); //將字節數組中的數據寫出
fo.close();
}
}
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2016-08/134437p2.htm