Java学习笔记 第七章 IO流

JAVA学习笔记第七章

7.IO流

7.1File类

image-20210520175801891

7.1.1对文件进行操作

image-20210520202338889

image-20210520202623360

image-20210520202709698

image-20210520202735457

image-20210520202832733

image-20210520202921318

image-20210520203048634

toString的效果永远是相对路径,在main方法中,相对位置一般指的就是工作空间

image-20210520203416159

绝对路径就是一个精准的、真实的、完整的路径

7.1.2对路径进行操作

上面对文件的方法,对路径都可以使用

但是对路径有一些单独的方法

image-20210520232428636

image-20210520232512595

image-20210520232640427

image-20210520232738161

7.2IO流

image-20210520233132787

image-20210520233232224

image-20210520233319263

7.2.1FileReader

从文件-》程序

image-20210520233652334

如果到文件的结尾,读取的内容为-1。反过来,读取到-1,那么就是文件的结尾。

image-20210520233857222

image-20210520233924578

一次读取多个字符

image-20210520234117958

image-20210520234247370

7.2.2FileWriter

image-20210520234505176

image-20210520234645754

几个字符一起写入

image-20210520234748902

7.2.3文件复制

利用FileReader和FIleWriter

package file.test;

import java.io.*;

/**
 * @Author:wrr
 * @Date:2021/5/20 - 05 - 20 - 11:49 下午
 * @Description:code_train
 */
public class FileTest {
    public static void main(String[] args) throws IOException {
        File f = new File("test.txt");
        //System.out.println(f.getAbsoluteFile());

        File f1 = new File("test1.txt");
        FileReader fr = new FileReader(f);
        FileWriter fw = new FileWriter(f1);
        //方式一:一个字符一个字符的读取和写入
        /*
        int n = fr.read();
        while(n != -1){
            fw.write(n);
            n = fr.read();
        }
         */

        //方式二:多个字符多个字符读取和写入
        char[] ch = new char[5];  //利用缓冲数组
        int len = fr.read(ch);  //返回len是读取的有效长度
        while(len != -1){
            fw.write(ch, 0, len);  //将缓冲数组的有效长度写出到文件
            len = fr.read(ch);
        }

        fr.close();
        fw.close();

    }
}

image-20210521001029879

使用try catch,关闭流的放到finally

image-20210521130654302

image-20210521130641406

image-20210521130750249

7.2.4FileInputStream

image-20210521131152230

image-20210521131412963

获取读取的字节数:

image-20210521131527405

利用缓冲数组:

image-20210521131721194

7.2.5图片复制

package file.test;

import java.io.*;

/**
 * @Author:wrr
 * @Date:2021/5/21 - 05 - 21 - 1:19 下午
 * @Description:code_train
 */
public class PhotoCopy {
    public static void main(String[] args) throws IOException {
        //源文件
        File f = new File("图3-3.jpg");
        File f1 = new File("图3-3(副本).jpg");
        //生成流
        FileInputStream fis = new FileInputStream(f);
        FileOutputStream fos = new FileOutputStream(f1);
        //复制
        byte[] b = new byte[1024];
        int len = fis.read(b);
        while(len != -1){
            fos.write(b, 0, len);
            len = fis.read(b);
        }
        //关闭流
        fis.close();
        fos.close();

    }
}

7.2.6BufferedInputStream

image-20210521134656438

image-20210521134104825

image-20210521134304499

image-20210521134803898

image-20210521134412045

效率对比:

image-20210521135031606

7.2.7BufferedReader

image-20210521135217080

image-20210521135329031

image-20210521135509944

image-20210521135242191

7.2.8InputStreamReader

image-20210521135740032

image-20210521141508473

如果编码不统一控制台会显示乱码,不写默认获取程序本身的编码

image-20210521141604883

image-20210521141620588

利用InputStreamReader读取文本文件,OutputStreamWriter写入文件

image-20210521141935734

image-20210521142002291

7.2.9System相关IO

image-20210521143137141

image-20210521142507402

image-20210521142728634

image-20210521142853924

image-20210521143049160

7.2.10键盘输入写入文件

image-20210521143443849

image-20210521143635570

image-20210521143924992

7.2.11DataInputStream

image-20210521144137468

image-20210521144254657

image-20210521144334618

image-20210521144449557

image-20210521144530055

7.2.12ObjectInputStream

image-20210521144649766

image-20210521144800053

image-20210521144920273

image-20210521144859107

对对象进行操作--》二进制数据:序列化

image-20210521145726715

image-20210521145123882

image-20210521145249938

image-20210521145415559

image-20210521145342895

二进制数据———》对象:反序列化

image-20210521145600834

image-20210521145809391

将上面的Person类加上toString方法,结果出现异常

出现的原因:

image-20210521150012638

解决方法:给类加上一个序列号serialVersionUID

image-20210521150152330

将带序列号的对象写入文件,这样读取文件的对象就能根据序列号识别类,不管类里面增加了什么方法、属性,仍然可以进行反序列化,那个对象可以正常使用toString方法,

idea配置序列号,将设置里面对应的选项勾选

image-20210521150621335

image-20210521150729641

image-20210521150942666

image-20210521151049747

原文地址:https://www.cnblogs.com/wrrr/p/14793920.html