Reader主要方法
FileReader示例
import java.io.*;
public class ReaderTest{
public static void main(String args[]){
try{
char[] c = new char[100];
FileReader f = new FileReader("Reader.txt");
int len = f.read(c);
while(len != -1){
System.out.println(c);
len = f.read(c);
}
}
catch(Exception e){
e.printStackTrace();
}
}
}
Write主要方法
FileWrite示例
import java.io.*;
public class WriterTest{
public static void main(String args[]){
try{
char[] c = new char[100];
String strTemp="";
FileReader r = new FileReader("Reader.txt");
FileWriter w = new FileWriter("Writer.txt");
int len = r.read(c);
while(len != -1){
strTemp += new String(c,0,len);
len = r.read(c);
} strTemp = strTemp.replaceAll("進","jin");
w.write(strTemp);
r.close();
w.close();
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}
InputStreamReader OutputStreamWriter
類InputStreamReader和OutputStreamWriter 用於處理字節流和字符流之間的轉換。
爲了達到最高效率,可以考慮在 BufferedReader 內包裝 InputStreamReader。
構造及方法
InputStreamReader示例
import java.io.*;
public class InputStreamTest{
public static void main(String args[]){
try{
char[] c = new char[100];
InputStreamReader r = new InputStreamReader(new FileInputStream("Reader.txt"));
int len = r.read(c);
while(len != -1){
System.out.println(c);
len = r.read(c);
}
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}
OutputStreamWriter示例
import java.io.*;
public class OutputStreamTest{
public static void main(String args[]){
try{
char[] c = {'a','b','c','d'};
OutputStreamWriter w = new OutputStreamWriter(new FileOutputStream("out.txt"));
w.write(c);
w.close();
FileInputStream in = new FileInputStream("out.txt");
int len = in.read();
while(len != -1){
System.out.println(len);
len = in.read();
}
in.close();
}
catch(Exception e){
System.out.println(e.toString());
}
}
}
BufferedReader BufferedWriter
爲了提高字符流處理的效率,引入了類BufferedReader和BufferedWriter對字符成塊的處理。
構造及方法
BufferedReader示例
import java.io.*;
public class BufferedReaderTest{
public static void main(String args[]){
try{
BufferedReader r = new BufferedReader(new FileReader("Reader.txt"));
String strLine = r.readLine();
while(strLine != null){
System.out.println(strLine);
strLine = r.readLine();
}
}
catch(Exception e){
System.out.println(e.toString());
}
}
}
BufferedWriter示例
import java.io.*;
public class BufferedWriterTest{
public static void main(String args[]){
try{
BufferedReader r = new BufferedReader(new FileReader("Reader.txt"));
BufferedWriter w = new BufferedWriter(new FileWriter("Writer.txt"));
String strLine = r.readLine();
while(strLine != null){
w.write(strLine);
w.newLine();
strLine = r.readLine();
}
w.close();
}
catch(Exception e){
System.out.println(e.toString());
}
}
}
管道流
管道流用來把一個程序、線程或代碼塊的輸出連接到另一個程序、線程或代碼塊的輸入。
java.io包中提供了類PipedInputStream和PipedOutputStream。
管道輸入流作爲一個通信管道的接收端,管道輸出流則作爲發送端。
在使用管道前,管道輸出流和管道輸入流必須要進行連接。
管道流
管道輸入/輸出流連接的方式有: 1.在構造方法中給出對應的輸入/輸出流進行連接。 public PipedInputStream(PipedOutputStream src) public PipedOutputStream(PipedInputStream snk) 2.使用管道輸入/輸出流提供的方法connect()進行連接。 類PipedInputStream中的定義爲: public void connect(PipedOutputStream src) 類PipedOuputStream中的定義爲: public void connect(PipedInputStream snk)
管道流示例
import java.io.*;
class Sender extends Thread{
private DataOutputStream dataout;
public Sender(PipedOutputStream out){
dataout = new DataOutputStream(out);
}
public void run(){
try{
System.out.println("準備發送數據...");
dataout.writeUTF("Hello,Welcome to China");
dataout.close();
}
catch(Exception e){
System.out.println(e.toString());
}
}
}
管道流示例
class Receiver extends Thread{
private DataInputStream datain;
String strData;
public Receiver(PipedInputStream in){
datain = new DataInputStream(in);
}
public void run(){
try{
System.out.println("準備接收數據...");
strData = datain.readUTF();
System.out.println(strData);
datain.close();
}
catch(Exception e){
System.out.println(e.toString());
}
}
}
管道流示例
public class PipedStreamTest{
public static void main(String args[]){
try{
PipedOutputStream out = new PipedOutputStream();
PipedInputStream in = new PipedInputStream();
out.connect(in);
System.out.println("管道輸入輸出流已經連接好!");
Thread t1 = new Sender(out);
Thread t2 = new Receiver(in);
t1.start();
t2.start();
}
catch(Exception e){
System.out.println(e.toString());
}
}
}
ByteArrayInputStream ByteArrayOutputStream StringBufferInputStream
通過類ByteArrayInputStream可以從字節數組中讀取數據,其初始化是在給定字節數組中完成的。
通過類ByteArrayOutputStream可以向字節數組中寫入數據,類中提供了緩衝區以存放數據,並且該緩衝區的大小可隨着數據的寫入而自動增加。
類StringBufferInputStream和ByteArrayInputStream基本類似,區別在於StringBufferInputStream是從字符串緩衝區StringBuffer中讀取16位的Unicode數據,而不是8位的字節數據。
ByteArrayInputStream示例
import java.io.*;
public class ByteArrayTest{
public static void main(String args[]){
try{
byte[] b1 = {97,98,99,100,101,102};
byte[] b2 = new byte[100];
ByteArrayInputStream in = new ByteArrayInputStream(b1);
int len = in.read(b2);
while(len != -1){
System.out.println(new String(b2,0,len));
len = in.read(b2);
}
in.close();
}
catch(Exception e){
System.out.println(e.toString());
}
}
}
順序輸入流
java.io包中提供了類SequenceInputStream,使應用程序可以把幾個輸入流順序地連接起來。
順序輸入流提供了把若干個不同的流統一成同一個流的功能,這使得程序可能變得更加簡潔。
SequenceInputStream示例
import java.io.*;
public class SequenceTest{
public static void main(String args[]){
try{
String strData;
FileInputStream f1 = new FileInputStream("input1.txt");
FileInputStream f2 = new FileInputStream("input2.txt");
SequenceInputStream s = new SequenceInputStream(f1,f2);
DataInputStream d = new DataInputStream(s);
while ((strData = d.readLine()) != null){
System.out.println(strData);
}
}
catch(Exception e){
System.out.println(e.toString());
}
}
}