IO流

1、java.io.File类

			File类是文件和目录路径名的抽象描述
			常用的API:
			(1)String getName():获取文件或目录名称
			(2)String getPath():获取文件或目录的路径(获取创建File对象时填写的路径)
			(3)String getAbsolutePath() :获取文件或目录的绝对路径
			(4)long  lenth():获取文件的长度,单位为字节
			(5)long lastModified():获取最后修改时间,单位为毫秒
			(6)String getParent():获取上级或父目录
			(7)boolean  isFile():判断是否为文件,是则返回true
			(8)boolean isDirectory():判断是否为目录,是则返回ture
			(9)boolean exists():是否存在
			(10)boolean isHidden():是否隐藏
			(11)boolean canWrite():是否可写
			(12)boolean canRead():是否可读
			(13)String[] list():获取下一级名称
			          File[] listFiles():获取下一级的File对象
			          File[] listFiles(FileFilter filter):获取下一级的File对象,可以过滤一些文件或目录
			(14)boolean createNewFile():创建文件
					  static File createTempFile(String prefix, String suffix) :在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。
			(15)boolean mkdir:创建目录
						boolean mkdirs:创建多级目录
			(16)delete(): 删除文件或空目录
			(17)boolean renameTo():重命名文件或目录

2、IO流的四大抽象基类

		1、四大超类
			(1)InputStream:字节输入流
			(2)OutputStream:字节输出流
			(3)Reader:字符输入流
			(4)Writer:字符输出流
			
		2、分类
			(1)按照方向分:输入流和输出流
			(2)按照处理方式的不同:分为字节流和字符流(字符流只能处理纯文本的数据,使用范围很小)
			(3)按照角色不同:节点流和处理流(处理流是建立在节点流的基础上的,处理流需要包装一个节点流的对象)
			
		3、API
			(1)InputStream:
			int read():一次读取一个字节,返回的是本次读取的字节的值,流末尾返回-1
			int read(byte[] data):一次读取多个字节,读取到的数据存储到data[]数组中,最多读取data.lenth个字节,返回的是本次读取的字节的个数,流末尾返回-1,从data[0]开始存储
			int read(byte[] data,int offset,int len):一次读取多个字节,读取到的数据存储到data[]数组中,最多读取len个字节,返回的是实际本次读取的个数,流末尾返回-1,从data[offset]开始存储
			void close():关闭流,释放资源
			
			(2)OutputStream:
			void write(int data):一次写一个字节
			void write(byte[] data):一次写一整个数组
			void write(byte[] data , int offset ,int len):一次写一部分,从数组的索引offset开始,写入len个
			void close:关闭流,释放资源
			void flush():刷新(一般都是配合缓冲流一起使用,刷新缓存区中的数据	)
			
			(3)Reader
			int read():一次读取一个字符,返回的是本次读取值的unicode值,流末尾返回-1
			int read(char[] data):一次读取多个字符,读取到的数据存储到data[]数组中,最多读取data.lenth个字节,返回的是本次读取的字符的个数,流末尾返回-1,从data[0]开始存储
			int read(byte[] data,int offset,int len):一次读取多个字符,读取到的数据存储到data[]数组中,最多读取len个字符,返回的是实际本次读取的个数,流末尾返回-1,从data[offset]开始存储
			void close():关闭流,释放资源
			
			(4)Writer
			void write(int data):一次写一个字符
			void write(char[] data):一次写一整个数组
			void write(char[] data , int offset ,int len):一次写一部分,从数组的索引offset开始,写入len个
			void write(String str):一次写整个字符串
			void write(String str , int offset ,int len):一次写一部分字符串,从数组的索引offset开始,写入len个
			void close:关闭流,释放资源
			void flush():刷新(一般都是配合缓冲流一起使用,刷新缓存区中的数据	)

3、文件IO流

		1、类型
			FileInputStream:文件字节输入流,可以读取任意类型的文件
			FileOutputStream:文件字节输出流,可以把字节数据输出到任意类型的文件
			FileReader:文件字符输入流,只能读取纯文本的文件,按照平台默认的字符编码进行解码
			FileWriter:文件字符输出流,只能把字符输出到纯文本文件中,按照平台默认的字符编码进行编码
			
		2、读写文件的代码
public void copy(File src , File dest) throws IOException{
	//选择IO流
	FileInputStream fis = new FileInputStream(src);
	FileoutputStream fos = new FileOutputStream(dest);

	//读写
	byte[] data = new data[1024];
	while(ture){
		int len = fis.read(data);
		if(len == -1){
		break;
		}
		fos.write(data , 0 , len);
	}
	//关闭
	fis.close();
	fos.close();
}

4、缓冲IO流

		1:分为
		BufferedInputStream:字节缓存输入流,给InputStream系列的IO流增加缓冲效果
		BufferedOutputStream:字节缓冲输出流,给OutputStream系列的IO流增加缓冲效果
		BufferedReader:字符缓冲输入流,给Reader系列的IO流增加缓冲效果
			新增API String readLine():按行获取
		BufferedWriter:字符缓冲输出流,给Writer系列的IO流增加缓冲效果
			新增API void newLine():输出换行符(用于跨平台跨语言使用,例如C)
		
		2:默认的缓冲区大小是8192 = 1024 * 8 (字符	/字节)
		3:可以给读写的过程提高效率 
			不仅仅是可以给文件IO流增加缓冲效果,也可以给任何符合对应类型的IO流增加缓冲效果
			实例代码:
public void copyBuffered(File src , File dest) throws IOException{
	//选择IO流
	FileInputStream fis = new FileInputStream(src);
	FileoutputStream fos = new FileOutputStream(dest);
	
	//BufferedInputStream只能给InputStream增加缓冲效果,使得读的过程加快了
	BufferedInputStream bis = new BufferedInputStream(fis);//fis在里面,bis在外面,fis比喻成内衣,bis比喻成外套
	
	//BufferedOutputStream只能给OutputStream增加缓冲效果,使得写的过程加快了
	BufferedOutputStream bos = new BufferedOutputStream(fos);
	//数据流向:src-->fis-->bis(从fis缓冲到bis)-->data-->bos(从data缓冲到bos中)-->fos-->dest
	//读写
	byte[] data = new data[1024];
	while(ture){
		int len = fis.read(data);
		if(len == -1){
		break;
		}
		fos.write(data , 0 , len);
	}
	//关闭
	bis.close();//先关外层,再关里层。比喻先脱外套再脱内衣,不然会导致数据还在缓冲区就关闭了会报错
	fis.close();
	
	bos.close()
	fos.close();
}

5、编码与解码的IO流(转换流)

		1、编码:OutputStreamWriter
		可以把字符流转为字节流输出,并且在转换的过程中可以指定编码。
		2、解码:InputStreamReader
		可以把字节输入流转换为字符输入流,并且在转换的过程中,可以指定字符解码。
		3、示例代码:解码(文件是GBK,当前平台是UTF-8)
public void test() throws IOException{
	//选择IO流
	FileInputStream fis = new FileInputStream("d:/testfile.txt");
	//将FileInputStream转换为InputStreamReader字符流
	InputStreamReader isr = new InputStreamReader(fis,"GBK");//其中未指定编码时按照默认的编码格式
	//数据流向:文件-->fis-->解码-->isr(字符流)-->br-->读取的是字符
	//字符流,要么按照char[]读取,要么可以使用BufferedReader包装按行进行读取
	BufferedReader br = new BufferedReader(isr);
	String line;
	while(line = br.readLine() != null){
		System.out.println(line);
	}
	//关闭
	br.close
	isr.close();
	fis.close();
}
		4、示例代码:编码(文件是GBK,平台是UTF-8)
public void test() throws IOException{
	String str = "File文件编码测试";
	//因为想在程序中编码,所以此处选择FileOutputStream
	FileOutputStream fos = new FileOutputStream("d:/File测试.txt",ture);//其中参数ture表示追加模式
	//想要直接操作字符串,那么必须是字符流,而fos是字节流,无法直接操作字符串
	OutoutStream osw = new OutoutStream(fos , "GBK");
	osw.write("\r\n");
	osw.write(str);
	//关闭
	osw.close();
	fos.close();
}


## 数据IO流
			1、类型
			DataInputStream:允许应用程序以与机器无关方式从底层输入流中读取基本java数据类型+字符串
			DataOutputStream:允许应用程序以适当方式将java数据类型和字符串写入输出流中
				它两必须要配对使用,读的顺序要与写的顺序一致
## 对象IO流
		1、类型
		ObjectOutputStream:对象序列化,输出对象,把对象转换为字节序号输出
		ObjectInputStream:对象反序列化,读取对象,把字节序列重构java对象
		2、API
		ObjectOutputStream:writeObject(对象)
		ObjectInputStream: Object readObject()
		3、序列化需要注意哪些内容
		(1)所有要序列化的对象类型必须实现java.io.Serializable接口
				如果对象的属性类型也是引用数据类型,也要实现该接口
		(2)类的修改后为了对象的反序列化不受影响,那么可以增加一个序列化版本ID
			private static final long serialVersionID = 1L;
		(3)如果有些属性不想序列化可以在其定义时加上transient关键字
		(4)某个属性前有static修饰,那么该属性也不参与序列化
		4、除了Serializable接口之外,还可以实现java.io.Externalizable接口,但是要求重写
		void readExternal(ObjectInput in)
		void writeExternal(ObjectOutput out)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值