IO流

一、IO流简介

         

java io流操作的类或接口
File文件类
InputStream字节输入流
OutputStream字节输出流
Reader字符输入流
Write字符输出流


IO流的分类

  • 根据处理数据类型的不同分为:字符流和字节流
  • 根据数据流向不同分为:输入流和输出流

二、File类

       File类是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。 File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的路径名,判断指定文件是否存在、获得当前目录中的文件列表,创建、删除文件和目录等方法。 


三、使用字符流和字节流读写数据(编码)----直接上代码。

     1、字符流---读和写

package com.zking.io;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * 需求:
 * 指定一个文件:
 * 	如果这个文件存在,则读取这个文件中的内容
 *  如果这个文件不存在,则写内容到这个文件中
 * @author Administrator
 *
 */
public class TestFile {
	public static void main(String[] args) {
		File file=new File("test.txt");
		//判断 该文件是否存在
		if(!file.exists()){
			//不存在:创建文件 写内容
			System.out.println("该文件不存在,正在创建...");
			//创建文件
			try {
				boolean b=file.createNewFile();
				if(b){
					System.out.println("创建成功了...");
					//写内容
					FileWriter fw=new FileWriter(file);
					fw.write("写的内容");
					fw.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			//file.mkdir();//创建文件夹
		}else{
			//存在:读取内容
			System.out.println("该文件存在,文件内容如下:");
			
			//读
			try {
				FileReader fr=new FileReader(file);
				char cbuf[]=new char[1024];
				int len=0;
				while((len=fr.read(cbuf))!=-1){
					//字符数组转成字符串
					String s=new String(cbuf, 0, len);
					System.out.println(s);
				}
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

   2、字节流--读写
package com.zking.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * 需求:
 * 指定一个文件:
 * 	如果这个文件存在,则读取这个文件中的内容
 *  如果这个文件不存在,则写内容到这个文件中
 *  用字节流
 * @author Administrator
 *
 */
public class TestFileByStream {
	public static void main(String[] args) {
		File file=new File("test2.txt");
		//判断 该文件是否存在
		if(!file.exists()){
			//不存在:创建文件 写内容
			System.out.println("该文件不存在,正在创建...");
			//创建文件
			try {
				boolean b=file.createNewFile();
				if(b){
					System.out.println("创建成功了...");
					//写内容(字节流 )
					FileOutputStream fos=new FileOutputStream(file);
					fos.write("写的内容".getBytes());
					fos.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			//file.mkdir();//创建文件夹
		}else{
			//存在:读取内容
			System.out.println("该文件存在,文件内容如下:");
			
			//读
			try {
				FileInputStream fis=new FileInputStream(file);
				byte b[]=new byte[1024];
				int len=0;
				while((len=fis.read(b))!=-1){
					//将字节数组转成字符串
					String s=new String(b, 0, len);
					System.out.println(s);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

四、转换流(字节流转成字符流)

   

  1. InputStreamReader:是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
  2. OutputStreamWriter: 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。

这两个流对象是字符体系中的成员,它们有转换作用,本身又是字符流,所以在构造的时候需要传入字节流对象进来。



五、简单的文件复制的实现

      

package com.zking.io;

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.RandomAccessFile;

/**
 * 实现文件复制
 * 1.来一个文件(字节流)
 * 2.读文件
 * 3.写文件
 * @author Administrator
 *
 */
public class TestCopy {
	public static void main(String[] args) {
		
		
		
		File file=new File("使用字节流和字符流进行文件的读写和File操作.webm");
		File fileOut=new File("C:\\Users\\Administrator\\Desktop\\a");
		try {
			//文件字节输入流(读)
			FileInputStream fis=new FileInputStream(file);
			//文件字节缓冲输入流
			BufferedInputStream bis=new BufferedInputStream(fis,10);
			
			//文件字节输出流(写)
			FileOutputStream fos=new FileOutputStream(fileOut+"\\"+file.getName());
			//文件字节缓冲输出流
			BufferedOutputStream bos=new BufferedOutputStream(fos);
			int len=0;
			byte[] b=new byte[1024];
			
			//使用缓冲流
			while((len=bis.read(b))!=-1){
				bos.write(b, 0, len);
			}
			bos.close();
			bis.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

六、序例化

     

  • 序列化: 将数据结构或对象转换成二进制串的过程
  • 反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程
try {
			//序列化
//			ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("user.exe"));
//			oos.writeObject(person);
//			oos.close();
			
			
			//反序列化(将存档从硬盘中读出来)
			ObjectInputStream ois=new ObjectInputStream(new FileInputStream("user.exe"));
			Person person2=(Person) ois.readObject();
			System.out.println(person2);
			ois.close();
		} catch (Exception e) {
			e.printStackTrace();
		} 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值