JAVAIO流01——Flie类、IO流

JAVAIO流总结01

File类

File类的一个对象,代表一个文件或者一个文件目录(文件夹)

Flie类涉及文件问价夹的创建、删除、重命名、修改时间、文件大小等方法(不涉及读写)

绝对路径相对路径

//idea使用Junit进行单元测试,相对路径为Module下
//使用main测试,相对路径为当前的project下
//eclipse无论测试方法还是main()都在project下

路径分隔符

windows和dos使用\

unix/

1、IO流分类

根据处理数据的数据类型的不同可以分为:

字节流(8bit)(抽象基类为InPutStream和OutPutStream)和字符流(16bit)(抽象基类为Reader和Writer)。

根据流向不同,可以分为:输入流和输出流。

根据角色的不同,可以分为节点流和处理流

字符流和字节流的主要区别:

        1.字节流读取的时候,读到一个字节就返回一个字节; 字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8码表中是3个字节)时。先去查指定的编码表,将查到的字符返回。

       2.字节流可以处理所有类型数据,如:图片,MP3,AVI视频文件,而字符流只能处理字符数据。只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。

2、最基础的四种抽象类

J2SDK 所提供的所有流类型位于包 Java.io 内,都分别继承自以下四种抽象流类型

//节点流(文件流)
//FileInputStream、FileOutputStream、FileReader、FileWriter
//缓冲流(处理流的一种)
//BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter

    @Test
    public static void TetsFile() throws IOException {
        //实例化File,指明操作文件
        File file = new File("my.txt");
        System.out.println(file.getAbsoluteFile());
        //提供具体的流
        FileReader fileReader = new FileReader(file); //节点流
        //数据的读入
        int read = fileReader.read();//如果读取到-1,已经读取到末尾
        while (read!=-1){ 
            System.out.println((char) read);
            read = fileReader.read();
        }
        //流的关闭,物理链接需要手动关闭资源
        fileReader.close();

    }
//抛出异常最好用try{}catch{},保证io流一定关闭。
 @Test
    public static void TetsFile(){
        FileReader fileReader = null; //节点流
        try {
            //实例化File,指明操作文件
            File file = new File("my.txt");
            System.out.println(file.getAbsoluteFile());
            //提供具体的流
            fileReader = new FileReader(file);
            //数据的读入
            int read = fileReader.read();
            while (read!=-1){
                System.out.println((char) read);
                read = fileReader.read();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if(fileReader!=null){
                    //流的关闭,物理链接需要手动关闭资源
                    fileReader.close();
                }
                
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
public static void test2() throws IOException {
        File file = new File("my.txt");
        FileReader reader = new FileReader(file);
        //读取
        char[] charbuffer = new char[5];
        int len  = reader.read(charbuffer);
        while (len!=-1){
            //遍历
            for (int i = 0; i < len; i++) {
                //不能够直接遍历数组,可能再次去到前一次保留的数据
                System.out.print(charbuffer[i]);
            }
            //遍历
            String str = new String(charbuffer,0,len);
            len = reader.read(charbuffer);
        }
        reader.close();

    }
public static void test3() throws IOException {
        //写出,从内存写出文件
        File outFile = new File("out.txt"); //输出可以不存在,存在默认会被覆盖
        FileWriter fileWriter = new FileWriter(outFile,true);  //追加
        fileWriter.write("保存数据1");
        fileWriter.write("\n");
        fileWriter.write("保存数据2");
        fileWriter.close();
    }
    public static void test4() throws IOException {

        File inFile = new File("my.txt");
        File outFile = new File("out.txt");
        FileReader fileReader = new FileReader(inFile);
        FileWriter fileWriter = new FileWriter(outFile);
        char[] charbuffer = new char[5];
        int len = fileReader.read(charbuffer);
        while (len!=-1){
            fileWriter.write(charbuffer,0,len);
            len = fileReader.read(charbuffer);
        }
        fileReader.close();
        fileWriter.close();
    }

    public static void test5() throws IOException {

        File inFile = new File("a.png");
        File outFile = new File("b.png");
        FileInputStream fileInputStream = new FileInputStream(inFile);
        FileOutputStream fileOutputStream = new FileOutputStream(outFile);

        byte[] charbuffer = new byte[20];
        int len = fileInputStream.read(charbuffer);
        while (len!=-1){
            fileOutputStream.write(charbuffer,0,len);
            len = fileInputStream.read(charbuffer);
        }
        fileInputStream.close();
        fileOutputStream.close();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上兵伐眸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值