Java的IO流

1.概述

Java的IO通过java.io包下面的接口和类来实现的,在java.io包下包括输入,输出两种IO流,每种输入和输出流又可以分为字节流和字符流两大类。其中字节流以字节为单位来处理输入输出操作,其中字符流以字符为单位来处理输入输出操作。

Java的IO流分为底层节点流和上层处理流,其中节点流用于和底层的物理节存储点直接关联——不同的物理节点获取节点流的方式可能存在差异,但程序可以把不同的物理节点包装成统一的处理流,从而允许程序使用统一的输入,输出代码来读取不同的物理存储节点的资源。

2.字节流

2.1InputStream抽象类

InputStream是所有字节流中输入流的抽象基类。

2.1.1FileInputStream类

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileInputStreamTest {
	public static void main(String[] args) {
		try {
			//创建一个字节输入流
			FileInputStream fis=new FileInputStream("src/com/t/lavor_zl.txt");
			byte[] buf=new byte[1024];//创建长度为1024的字节数组
			int hasRead=0;//用来保存实际读取的字节数
			/*read()方法还有两种重载:read()读取一个字节,返回读取的字节;
                        *read(char[] buf,int off,int len)从off位置开始读取len个字节
                        *并将它存储在buf中,返回实际读取字节的个数
                        */
			while((hasRead=fis.read(buf))>0){
				System.out.println(new String(buf,0,hasRead));
			}
			fis.close();//关闭输入流
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}

}

PS:汉字占2个字符,若只读取了汉字的一个字符,会出现乱码。

2.2OutputStream抽象类

OutputStream是所有字节流中输出流的抽象基类。

2.2.1FileOutputStream类

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamTest {
	public static void main(String[] args) {
		try {
			FileOutputStream fos=new FileOutputStream("src/com/t/lavor.txt");
			byte[] buf=new byte[1024];
			String str="lavor_zl";
			buf=str.getBytes();//将字符串转换成字符数组
                        /*
                                          *write()方法还有两种重载:writer(int b)将指定的字节输出到输入流;
                        * writer(byte[] buf)将字符数组输出到输出流
                        */
			fos.write(buf, 0, str.length());
			fos.close();//关闭输出流
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

3.字符流

3.1Reader抽象类

Reader是所有字符流中的输入流的抽象基类。

3.1.1FileReader类

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class FileReaderTest {
	public static void main(String[] args) {
		try {
			//创建一个输入流
			FileReader fr=new FileReader("src/com/t/lavor_zl.txt");
			char[] buf=new char[1024];
			int hasRead=0;
			
			/*read()方法还有两种重载:read()读取一个字符,返回读取的字符;
			*read(char[] buf,int off,int len)从off位置开始读取len个字符
			*并将它存储在buf中,返回实际读取字符的个数
			*/
			while((hasRead=fr.read(buf))>0){
				System.out.println(new String(buf,0,hasRead));
			}
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

3.2Writer抽象类

Writer是所有字符流中的输出流的抽象基类。

3.2.1FileWriter类

import java.io.FileWriter;
import java.io.IOException;

public class FileWriterTest {
	public static void main(String[] args) {
		try {
			FileWriter fw=new FileWriter("src/com/t/lavot.txt");
			char[] buf=new char[]{'l','a','v','o','r'};
			fw.write(127);//输入指定字符到输出流,参数是int型
			fw.write(buf);//输入指定字符数组到输出流
			fw.write(buf, 0, 3);//从指定字符数组中输出从0位置开始的3个字符到输出流
			fw.write("lavor_zl");//输入指定字符串到输出流
			fw.write("lavor_zl", 0, 3);//从指定字符串中输出从0位置开始的3个字符到输出流
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

4.IO流体系

分类 字节输入流 字节输出流 字符输入流 字符输出流
抽象基类 InputStream
OutputStream Reader Writer
访问文件 FileInputStream FileOutputStream FileReader FileWriter
访问数组 ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter
访问管道 PipedInputStream PipedOutputStream PipedReader PipedWriter
访问字符串

StringReader StringWriter
缓冲流 BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter
转换流

InputStreamReader OutputStreamWriter
对象流 ObjectInputStream ObjectOutputStream

抽象基类 FilterInputStream FilterOutputStream FilterReader FilterWriter
打印流
PrintStream
PrintWriter
推回输入流 PushbackInputStream
PushbackReader
特殊流 DataInputStream DataOutputStream    
红色代表抽象基类,无法直接创建实例;蓝色代表字节流,必须直接与指定的物理节点关联


你可能感兴趣的:(IO流,输出流,输入流,输入输出,Java输入输出)