java的IO流操作

  

 


 

1.输入字节流InputStream

IO 中输入字节流的继承图可见上图,可以看出:

1)、InputStream 是所有的输入字节流的父类,它是一个抽象类。

2)、ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。PipedInputStream 是从与其它线程共用的管道中读取数据,与Piped 相关的知识后续单独介绍。

3)、ObjectInputStream 和所有FilterInputStream 的子类都是装饰流(装饰器模式的主角)。

2.输出字节流OutputStream

IO 中输出字节流的继承图可见上图,可以看出:

扫描二维码关注公众号,回复: 814221 查看本文章

1)、OutputStream 是所有的输出字节流的父类,它是一个抽象类。

2)、ByteArrayOutputStream、FileOutputStream 是两种基本的介质流,它们分别向Byte 数组、和本地文件中写入数据。PipedOutputStream 是向与其它线程共用的管道中写入数据,

3)、ObjectOutputStream 和所有FilterOutputStream 的子类都是装饰流。

3.字符输入流Reader

在上面的继承关系图中可以看出:

1)、Reader 是所有的输入字符流的父类,它是一个抽象类。

2)、CharReader、StringReader 是两种基本的介质流,它们分别将Char 数组、String中读取数据。3)、3)、PipedReader 是从与其它线程共用的管道中读取数据。

4)、BufferedReader 很明显就是一个装饰器,它和其子类负责装饰其它Reader 对象。

5)、FilterReader 是所有自定义具体装饰流的父类,其子类PushbackReader 对Reader 对象进行装饰,会增加一个行号。

6)、InputStreamReader 是一个连接字节流和字符流的桥梁,它将字节流转变为字符流。FileReader 可以说是一个达到此功能、常用的工具类,在其源代码中明显使用了将FileInputStream 转变为Reader 的方法。我们可以从这个类中得到一定的技巧。Reader 中各个类的用途和使用方法基本和InputStream 中的类使用一致。后面会有Reader 与InputStream 的对应关系。

4.字符输出流Writer

在上面的关系图中可以看出:

1)、Writer 是所有的输出字符流的父类,它是一个抽象类。

2)、CharArrayWriter、StringWriter 是两种基本的介质流,它们分别向Char 数组、String 中写入数据。3)、PipedWriter 是向与其它线程共用的管道中写入数据,

4)、BufferedWriter 是一个装饰器为Writer 提供缓冲功能。

5)、PrintWriter 和PrintStream 极其类似,功能和使用也非常相似。

6)、OutputStreamWriter 是OutputStream 到Writer 转换的桥梁,它的子类FileWriter 其实就是一个实现此功能的具体类(具体可以研究一SourceCode)。功能和使用和OutputStream 极其类似,后面会有它们的对应图。

 

1、字符流 reader和writer

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;

public class FileDemo {
	
	public static void main(String[] args) {
		
		FileReader fr = null;
		FileWriter fw = null;
		
		try {
			fr = new FileReader(new File(".","zFileDemo.java"));
			fw = new FileWriter(new File("demo.java"));
			
			//1、原始的操作
			/*int num = 0;
			while((num = fr.read())!=-1){
				System.out.println((char)num);
			}*/
			
			//2、一次读取指定大小的操作
			/*int len = 0;
			char[] buffer = new char[1024];//用的是字符数组
			while((len = fr.read(buffer))!=-1){
				System.out.println(new String(buffer, 0, len));
			}*/
			
			//3、带缓存区的字符操作
			BufferedReader br = new BufferedReader(fr);
			BufferedWriter bw = new BufferedWriter(fw);
			
			String lineContent = null;//br.readLine();
			while((lineContent = br.readLine())!=null){
				System.out.println(lineContent);
				System.out.println(lineContent.length());
				System.out.println(lineContent==null);
				System.out.println(lineContent.equals(""));
				
				//fw.write(lineContent);
				//fw.write("\n");
				
				bw.write(lineContent);
				bw.write("\n");//回行
			}
			bw.flush();//一定要flush到文件中
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(fr!=null){
				try {
					fr.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			
			if(fw!=null){
				try {
					fw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
}

 

 2、字节流

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class ByteStreamDemo {

	public static void main(String[] args) {
		FileInputStream fileInputStream = null;
		FileOutputStream fileOutputStream = null;
		try {
			fileInputStream = new FileInputStream(new File("bjt.jpg"));
			fileOutputStream = new FileOutputStream(new File("bjt2.jpg"));
			int bytes = 0;//fileInputStream.read();
			while((bytes = fileInputStream.read())!=-1){
				fileOutputStream.write(bytes);
			}
			fileOutputStream.flush();
			System.out.println("--------");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(fileInputStream!=null){
				try {
					fileInputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			
			if(fileOutputStream!=null){
				try {
					fileOutputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	public static void main2(String[] args) {
		
		BufferedInputStream bis  = null;
		BufferedOutputStream bos = null;
		
		try {
			bis = new BufferedInputStream(new FileInputStream("bjt.jpg"));
			bos = new BufferedOutputStream(new FileOutputStream(new File("bjt3.jpg")));
			byte[] buffer = new byte[1024];
			int len = 0;
			while((len = bis.read(buffer))!=-1){
				bos.write(buffer, 0, len);
			}
			bos.flush();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(bis!=null){
				try {
					bis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			
			if(bos!=null){
				try {
					bos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
	}
}

 

 

 

 

 

1、http://blog.csdn.net/zzp_403184692/article/details/8057693

2、http://wenku.baidu.com/link?url=DMM0iEUegOWLIslmtnAct4gMlIBVMnYSW3Lz0_OSzmoNdJnUrmnnZLVOORu6nJWVnbMlPe-FL3GRQ-uRKA80CbLdXrA4BXzW9YUMN-_wYa7

猜你喜欢

转载自lehsyh.iteye.com/blog/2219802