• 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

  • 相关阅读:
    工作两周年—项目研发总结(201105201305)
    Java时间日期格式转换Date转String和String转Date
    Comm100 Email Marketing API学习小结
    outlook错配置账户到exchange后的删除办法
    excel自动调整行高和设置默认行高
    关于通过vmware安装windows8的几个问题及解决无人参与应答文件包含的产品密钥无效
    如何查看各个邮件客户端的邮件标头
    服务网格和Istio初识
    solidity开发2合约结构
    DDraw笔记一个简单的DDraw应用程序
  • 原文地址:https://www.cnblogs.com/wrrr/p/14793920.html
Copyright © 2020-2023  润新知