IO

本文介绍了Java IO流的分类,包括节点流和处理流,并通过实例演示了如何使用InputStream、OutputStream、Reader和Writer类进行文件读写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、流的分类(所有流均位于java.io包内):


注:这里的输入输出是相对于内存而言的,从文件读取是将文件内容读到内存中,因此对于内存而言就是input;同样向文件写内容,是将内存中的内容写入文件,因此相对于内存而言就是output。

按照功能不同还可以分为节点流和处理流

节点流:从数据源直接读取数据(文件、内存)

处理流:从其他流(节点流或处理流)获得数据,以便对数据进行进一步处理,为程序提供更大的读写功能

2、InputStream类(深色为节点流,浅色为处理流)



3、OutputStream类(深色为节点流,浅色为处理流)



4、Reader类(深色为节点流,浅色为处理流),注意这是字符流,每次读取一个字符(2个字节)



5、Writer类(深色为节点流,浅色为处理流),同样是字符流


6、一些重要的节点流



7、一些重要的处理流



注:

关于IO的一个小程序

import java.io.*;
public class TestFileInputStream{
	public static void main(String []args){
		FileInputStream fs=null;
		FileOutputStream fo=null;
		int b=0;
		try{
			fs=new  FileInputStream("d:/java/File/TestFileInputStream.java");
			fo=new FileOutputStream("d:/java/File/copy.java");
			
		}catch(FileNotFoundException e){
			e.printStackTrace();
		}
		try{
			while((b=fs.read())!=-1){
				System.out.print((char)b);
				fo.write(b);
			}
			fs.close();
			fo.close();
		}catch(IOException e){
			System.out.println("读取文件错误");
		}

	}


}


该程序的功能是将文件自身读取打印并复制写到copy.java文件中

(1)出现一种情况:

在文件打印的时候,文件里面的“读取文件错误”这段中文打印为乱码,这可以理解,因为我是用字节流读取的,每次读取一个字节并打印,当然不能正确打印中文(一个中文两个字节)。

但是,将文件复制后的copy.java文件确实正确的复制过来的,包括正确的中文,到网上查询资料,解释如下:

字节流的复制并没有经过解码-编码这个过程,复制过去的就是原来的文件;复制过程中,一个汉字的确是被拆成两个字节来复制,但是在用编辑器打开时,编辑器会识别出这两个相邻的字节就是一个汉字,从而能够正确读取出来。

(2)要想读取出正确的中文,可以用字符流比如InputStreamReader,如下:

import java.io.*;
public class TestFileInputStream{
	public static void main(String []args){
		FileInputStream fs=null;
		InputStreamReader fsr=null;
		FileOutputStream fo=null;
		int b=0;
		try{
			fs=new  FileInputStream("d:/java/File/TestFileInputStream.java");
			fsr=new  InputStreamReader(fs);
		}catch(FileNotFoundException e){
			e.printStackTrace();
		}
		try{
			while((b=fsr.read())!=-1){
				System.out.print((char)b);		
			}
			fs.close();
		}catch(IOException e){
			System.out.println("读取文件错误");
		}

	}
}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值