J2SE(十六)Java之I/O

前言

        说到Java IO,不得不提到的就是流(Stream)的概念。流的概念源于UNIX中管道(pipe)的概念,它是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

I/O分类

Java中定义了多种不同流的类型来实现输入和输出功能,可以从不同的角度对其进行分类:
(1)根据数据流向不同分为:输入流和输出流
(2)根据处理数据类型的不同分为:字符流和字节流
(3)根据功能的不同分为:节点流和处理流
一、输入流、输出流:
         输入输出流是从内存的角度划分的,数据从内存到硬盘,通常认为是输出流,即写操作,从硬盘到内存,通常认为是输入流,即读操作,Java的输入流主要有InputStream和Reader作为基类,而输出流则主要由OutputStream和Writer作为基类。
二、字符流、字节流:
         字节流和字符流区别非常简单,它们的用法几乎一样。区别在于字节流和字符流所操作的数据单元不同:字节流操作的最小单元数据是8位字节,而字符流作为最小数据单元是16为字节。字节流主要由InputStream、OutputStream作为基类,而字符流则主要由Reader和Writer作为基类完成。
三、节点流、处理流:
        可以从、向一个特定的IO设备,读写数据流,称为节点流,节点流常常也被常务低级流(Low Level Stream),处理流则用于对一个已经存在的流进行连接封装,通过封装后来实现数据的读写功能。处理流称为高级流。
       当用处理流的进行输入、输出时,程序并不会直接连接到实际数据源,没有和实际的输入、输出节点连接。使用处理流一个明显的好处是:只要使用相同的处理流,程序就可以采用相同的输入、输出代码来访问不同数据源,随着处理流锁包装节点流的改变,程序实际所访问的数据源也相应发生改变。
处理流的功能主要体现在两个方面:
(1)性能提高:主要以增加缓冲方式来提高输入、输出的效率
(2)操作的便捷:处理流可能提供了系列便捷的方法来一次性输入、输出大批量的内容,而不是输入、输出一个或多个单位数据。
处理流可以“嫁接”在任何已经存在的流的基础上,这就允许Java应用程序采用相同的代码、透明的方式来访问不同的输入、输出设备输入流。
  字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer

IO体系:

下面来看几个例子

//InputStream读文件
	public void readFileByInputStream(String fileName){
		try {
			int b=0;
			InputStream in=new FileInputStream(fileName);
			while ((b=in.read())!=-1) {
				System.out.println(b);
			}
			in.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
//FileReader读文件
	public void readFileByFileReader(String fileName){
		try {
			int b=0;
			FileReader reader=new FileReader(fileName);
			while ((b=reader.read())!=-1) {
				System.out.println(b);
			}
			reader.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
//写文件
	public void writeByOutPutStream(String fileName,String targetFile){
		int b=0;
		InputStream in;
		try {
			in = new FileInputStream(fileName);
			OutputStream out=new FileOutputStream(targetFile);
			while ((b=in.read())!=-1) {
				out.write(b);
			}
			in.close();
			out.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	//写文件
	public void writeByFileWriter(String fileName,String targetFile){
		int b=0;
		FileReader reader;
		try {
		    reader=new FileReader(fileName);
			FileWriter out=new FileWriter(targetFile);
			while ((b=reader.read())!=-1) {
				System.out.println(out.getEncoding());
				out.write((char)b);
			}
			reader.close();
			out.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章