1. 程式人生 > 其它 >Java筆記 字元流

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();
}
}
}
}