java9:IO流

一.整体架构

1.整体架构图

在这里插入图片描述

2.整体架构概述

①File类简述

/*
1.File类的概述
每一个对象都对应的一个File类
File类只进行对文件表明的操作,如果涉及对文件的读写需要涉及流
2.File类的路径概述
绝对路径:写出绝对路径的文件
相对路径:main方法写出相对于当前工程下的相对路径。test方法写出相对于当前工程下的module的路径
window分隔符:\(转义字符相同,故绝对路径时需要添加\)
linux分隔符/
3.File类的方法
createNewFile(新建文件)
delete(删除文件)
*/

②流类简述

/*
1.流的介绍
输入流:硬盘到内存。输出流:内存到硬盘。
2.流的多种类
抽象流:InputStream,Reader,(用于其他类实现方法)
节点流:FileInputStream,FileReader,(用于实际上传输数据的流)
缓冲流:BufferedInputStram,BufferedReader,(处理流,能够提供缓冲加速节点流的传输)
转换流:InputStreamReader,OutputStramWriter(处理流,能够转换字节流和字符流)
字节流:能够传输字节的流(图片,视频等)
字符流:能够传输字符的流(txt文件等)
3.字符流的使用
实例化File对象
实例化节点流对象
节点流对象进行相应的操作
节点流对象资源的关闭
4.缓冲流的使用
实例化File对象
实例化FileReader和FileWriter对象
实例化BufferedReader和BufferedWriter对象
写入和写出(char数组要不足够大,要不设置len来规定写出多少)
资源关闭
5.转换流的使用
实例化File对象
实例化FileInputStream和FileOutputStream对象
实例化InputStreamReader和OutputStreamWriter对象
写入和写出(转换格式为gbk)
资源关闭
6.Java序列化机制简介:
序列化过程:java对象作为二进制存储在磁盘上
反序列化过程:将java对象还原为内存中的java对象
ObjectOutputStream
ObjectInputStream
7.序列化的使用
实例化对象和流对象
入操作
关闭资源
*/

③字符集简介

/*
1.字符集的理解:
Unicode只是定义了编号,而不是编码集,具体实现Unicode的编码集是utf-8
utf—8:是码的集合
ASCII:是美国信息交换码
GBK:是中国汉字编码
*/

二.代码

1.file类

/*
1.File类的概述
每一个对象都对应的一个File类
File类只进行对文件表明的操作,如果涉及对文件的读写需要涉及流
2.File类的路径概述
绝对路径:写出绝对路径的文件
相对路径:main方法写出相对于当前工程下的相对路径。test方法写出相对于当前工程下的module的路径
window分隔符:\(转义字符相同,故绝对路径时需要添加\)
linux分隔符/
3.File类的方法
createNewFile(新建文件)
delete(删除文件)
 */
public class Test1 {
    //测试相对路径
    //在项目\下生成了一个1
    public static void main(String[] args){
        File tx = new File("1");
        tx.mkdir();
    }
    //在项目\module下生成了一个my
    @Test
    public void test0(){
        File tx1 = new File("my");
        tx1.mkdir();
    }
    //File类的方法测试
    @Test
    public void testMethod() throws Exception{
        File a = new File("my");
        a.createNewFile();
        a.delete();

    }
}

2.流类

/*
1.流的介绍
输入流:硬盘到内存。输出流:内存到硬盘。
2.流的多种类
抽象流:InputStream,,Reader,,(用于其他类实现方法)
节点流:FileInputStream,,FileReader,,(用于实际上传输数据的流)
缓冲流:BufferedInputStram,,BufferedReader,,(处理流,能够提供缓冲加速节点流的传输)
转换流:InputStreamReader,OutputStramWriter(处理流,能够转换字节流和字符流)
字节流:能够传输字节的流(图片,视频等)
字符流:能够传输字符的流(txt文件等)
3.字符流的使用
实例化File对象
实例化节点流对象
节点流对象进行相应的操作
节点流对象资源的关闭
4.缓冲流的使用
实例化File对象
实例化FileReader和FileWriter对象
实例化BufferedReader和BufferedWriter对象
写入和写出(char数组要不足够大,要不设置len来规定写出多少)
资源关闭
5.转换流的使用
实例化File对象
实例化FileInputStream和FileOutputStream对象
实例化InputStreamReader和OutputStreamWriter对象
写入和写出(转换格式为gbk)
资源关闭
6.Java序列化机制简介:
序列化过程:java对象作为二进制存储在磁盘上
反序列化过程:将java对象还原为内存中的java对象
ObjectOutputStream
ObjectInputStream
7.序列化例子
实例化对象和流对象
入操作
关闭资源
*/
public class Test2 {
    //字符流的例子
    @Test
    public void test0() throws Exception{
        File file = new File("test.txt");
        FileReader fr = new FileReader(file);
        int data = fr.read();//read方法返回int型,到文件末尾返回-1
        while(data!=-1){
            System.out.print((char)data);
            data = fr.read();
        }
        FileWriter fw = new FileWriter(file);
        fw.write("\n你好世界");//write方法没有文件创造文件,有文件默认覆盖文件,第一个参数file,第二个参数为默认false覆盖文件,填true即为追加
        while(data!=-1){
            System.out.print((char)data);
            data = fr.read();
        }
        fr.close();
        fw.close();
    }
    //缓冲流的例子
    @Test
    public void test1() throws Exception{
        File file_r = new File("test.txt");
        File file_w = new File("test2.txt");
        FileReader fr = new FileReader(file_r);
        FileWriter fw = new FileWriter(file_w);
        BufferedReader br = new BufferedReader(fr);
        BufferedWriter bw = new BufferedWriter(fw);
        //此处逻辑
        //char数组设置的够大,直接赋值全部
        //char数组设置的不够大,需要更换逻辑,因为一次写入3个字节,汉字可能正好对应两个,则第二个汉字出现问题
        //如原文本你好世界,结果文本为你好世界好世,即第二次输出为界好世
        //因为数组在复制的过程中,在最后一次如果只写入前几个,那么上一次写入的剩余还会保存在后几个
        //故需要设置len来固定每次写入的大小
        char[] ch = new char[3];
        int len;//加入len后解决问题
        while((len =br.read(ch))!=-1){
            bw.write(ch,0,len);
        }
        bw.close();
        br.close();
    }
    //转换流的例子(变换字符集)
    @Test
    public void test2() throws Exception{
        File file_r = new File("test.txt");
        File file_w = new File("test2-gbk.txt");
        FileInputStream fis = new FileInputStream(file_r);
        FileOutputStream fos = new FileOutputStream(file_w);

        InputStreamReader isr = new InputStreamReader(fis);//转换字节到字符(输入字节流) (输入)
        OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");//转换字符到字节(输入字节流)(输出)

        char[] ch = new char[5];
        int len;
        while((len = isr.read(ch))!=-1){
            osw.write(ch,0,len);
        }
        osw.close();
        isr.close();
    }
    //序列化过程
    @Test
    public void test() throws Exception{
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("object.dat")));
        oos.writeObject(new String("我喜欢你"));
        oos.flush();
        oos.close();
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("object.dat")));
        Object obj = ois.readObject();
        System.out.println((String)obj);
        ois.close();
    }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值