欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java IO流总结

程序员文章站 2024-03-04 21:48:48
...

java IO流总结

流:流是一组有序的,有起点、终点的字节集合,是对数据传输的总称和抽象。即数据在两设备间的传输称为流,流的本质是数据传输。根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

根据处理数据类型不同分类:字符流和字节流

根据数据流向不同分为:输入流和输出流

根据是否直接连接数据源分为:节点流和处理流(装饰流

字符流和字节流的区别:

字节流:一次读入或读出8位二进制(一个字节),能处理所有类型的数据。

字符流:因为数据编码的不同,为了对字符进行更高效操作,产生了字符流,其本质基于字节流。一次读入或读出16位二进制(一个字符),根据码表映射字符,一次可读取多个字节,只能处理字符类型数据。

节点流:直接连接数据源的流类,实现将数据源转换为流对象,实体流类可单独使用,例如:FileInputStream/FileOutputStream和FileReader/FileWriter。

装饰流:不直接连接数据源,而是以其他流对象为基础建立的流类,实现将实体流中数据进行转换,增强流对象的读写能力,必须配合实体流或装饰流进行使用。被称为“流的嵌套”,它不改变原来流对象中数据的内容,只是进行了一些功能的增强。例如:DataInputStream/DateOutputStream、BufferReader和BufferWriter和ObjectInputStream/ObjectOutputStream。

下面给出FileInputStream、BufferInputStream、BufferReader读写文件的例子:

package stream;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class StreamTest {

	public static void main(String[] args) {
		String fileName = "L:\\Workspace\\Test\\src\\stream\\StreamTest.java";
		String result = null;
		
		result = readByFileInputStream(fileName);
		System.out.println("result1: " + result);
		
		result = readByBufferInputStream(fileName);
		System.out.println("result2: " + result);
		
		result = readByBufferedReader(fileName);
		System.out.println("result3: " + result);
	}
	
	/**
	 * 使用BufferInputStream读取文件
	 * @param fileName
	 */
	public static String readByBufferInputStream(String fileName) {
		BufferedInputStream bufferInputStream = null;
		FileInputStream inputStream = null;
		try {
			inputStream = new FileInputStream(new File(fileName));
			bufferInputStream = new BufferedInputStream(inputStream);
			int size = bufferInputStream.available();
			byte[] tmpArr = new byte[size];
			bufferInputStream.read(tmpArr);
			
			return new String(tmpArr);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (null != bufferInputStream) {
				try {
					bufferInputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (null != inputStream) {
				try {
					inputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return null;
	}
	
	/**
	 * 使用FileInputStream读取文件
	 * @param fileName
	 */
	public static String readByFileInputStream(String fileName) {
		FileInputStream inputStream = null;
		try {
			inputStream = new FileInputStream(new File(fileName));
			int size = inputStream.available();
			byte[] tmpArr = new byte[size];
			inputStream.read(tmpArr);
			
			return new String(tmpArr);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (null != inputStream) {
				try {
					inputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
		return null;
	}
	
	/**
	 * 使用BufferedReader读取文件
	 * @param fileName
	 */
	public static String readByBufferedReader(String fileName) {
		FileReader reader = null;
		BufferedReader bufferReader = null;
		String result = null;
		try {
			reader = new FileReader(new File(fileName));
			bufferReader = new BufferedReader(reader);
			String line = null;
			StringBuilder builder = new StringBuilder();
			while (null != (line = bufferReader.readLine())) {
				builder.append(line).append('\n');
			}
			result = builder.toString();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (null != reader) {
				try {
					reader.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (null != bufferReader) {
				try {
					bufferReader.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
		return result;
	}
}

 

 

参考:http://blog.csdn.net/zhaoyanjun6/article/details/54292148

 

相关标签: Java IO