Java筆記 字元流
Java筆記 字元流
1. OutputStreamWriter類
構造方法
構建流物件
FileOutputStream fileOutput = new FileOutputStream("TestIO\\demo04.txt");
OutputStreamWriter writer = new OutputStreamWriter(fileOutput,"GBK");
方法的呼叫
writer.write("我是一個好人");
writer.write(new char[] {'的','額'});
writer.flush();
想要在程式結束前將緩衝區裡的資料寫入磁碟,除了填滿緩衝區或關閉輸出流外,還可以主動呼叫flush()方法。
2. InputStreamReader類
構造方法
構建流物件
InputStreamReader reader = new InputStreamReader(new FileInputStream("TestIO\\demo04.txt"),"GBK");
System.out.println((char)reader.read());//read()返回的是一個int型別的位元組
char[] data = new char[1024];
int length = reader.read(data); // read(data)返回的是所讀位元組數
System.out.println(new String(data,0,length));
3. FileReader類
FileReader是InputStreamReader的子類,重寫了構造方法,其他方法基本沒變
構造方法
構建流物件
FileReader writer = new FileReader(TestIO\\demo04.txt");
4. FileWriter類
FileWriter是OutputStreamWriter的子類,重寫了構造方法,其他方法基本沒變
構造方法
構造流物件
FileWriter reader = new FileWriter("TestIO\\demo04.txt");
5. BufferedWriter
使用緩衝流,可提高字元流處理的效率
構造方法
構建流物件
BufferedWriter writer = new BufferedWriter(new FileWriter("TestIO\\demo05.txt"));
方法的呼叫
writer.write("www.sikiedu.com是一個很...的網站",0,3);
writer.flush();
6. BufferedReader
構造方法
構建流物件
BufferedReader reader = new BufferedReader(new FileReader("TestIO\\demo04.txt"));方法的呼叫
System.out.println((char)reader.read());
char[] data = new char[1024];
reader.read(data);
System.out.println(new String(data));
7. 練習,運用字元流進行復制
匯入包:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import org.junit.Test;
測試方法:
public class Demo13_Practice {
@Test
public void testCopy() {
long start = System.currentTimeMillis();//記錄法一開始複製的時間
copyByChar("TestIO\\demo04.txt", "TestIO\\demo05.txt");//呼叫法一複製
System.out.println(System.currentTimeMillis()-start);//輸出複製法一所用時間
start = System.currentTimeMillis();//記錄法二開始複製的時間
copyByCharArray("TestIO\\demo04.txt", "TestIO\\demo06.txt");//呼叫法二複製
System.out.println(System.currentTimeMillis()-start);//輸出複製法二所用時間
}
法一,使用read();方法一個位元組一個位元組複製,效率慢,該方法返回的是一個int型別的位元組
public void copyByChar(String sourceName,String targetName) {
BufferedReader reader=null;
//宣告流物件 放在try外部,以便在finally關閉流
BufferedWriter writer = null;
try {
reader = new BufferedReader(new FileReader(sourceName));
//構建流物件
writer = new BufferedWriter(new FileWriter(targetName));
int data = -1;
while( (data = reader.read())!=-1 ) {
writer.write(data);
}
writer.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(writer!=null)
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if(reader!=null)
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
法二,使用read(byte[] b)方法進行位元組陣列複製,效率快,該方法返回的是所讀位元組數。
public void copyByCharArray(String sourceName,String targetName) {
BufferedReader reader=null;
BufferedWriter writer = null;
try {
reader = new BufferedReader(new FileReader(sourceName));
writer = new BufferedWriter(new FileWriter(targetName));
char[] data = new char[1024];
int length = -1;
while( (length = reader.read(data))!=-1 ) {
writer.write(data, 0, length);
}
writer.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(writer!=null)
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if(reader!=null)
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}