首页 > 其他分享 >IO流process3

IO流process3

时间:2024-08-10 16:05:33浏览次数:9  
标签:字节 process3 class IO println 序列化 public out

1、IO流(JDK API 1.6.0中文版)

I : intput输入 O : output输出

  • 流:内存与存储设备之间传输数据的通道

  • 流的分类:

    1. 按方向:输入流——将<内存设备>中的内容读入到<内存>中

    ​ 输出流——将<内存>中的内容读入到<内存内存设备>中

    1. 按单位:字节流——以字节为单位,可以读写所有数据

      ​ 字符流——以字符为单位,只能读写文本数据

    2. 按功能:节点流——具有实际传输数据的读写能力

      ​ 过滤流——在节点流基础上的增强功能

2、字节流(抽象类)

  • 字节流的父类(抽象类):

    抽象类不能直接实例化

    1. InputStream:字节输入流
    2. OutputStream:字节输出流

2.1FileInputStream(文件字节流)的使用

  • FileInputStream:

    public int read(byte[] b) 从流中读取多个字节,将读到的内容存入b数组,返回实际读到的字节数;如果达到文件底部,则返回-1

    1. 创建FileInputStream,并指定文件路径(提前抛出异常-查找不到文件)

    2. 读取文件read();

      2.1 一次读取一个字节,采用while循环(注意读取的是字节,具体内容需要强制转换

      2.2一次读取多个字节(通过数组)-使用循环实现更简介

    3. 关闭close();IO流结束一定要关闭,节省空间

package byteStream;
public class Demo1

2.2FileOutputStream的使用

  • FileOutputStream:

​ public void write(byte[] b) 一次写多个字节,将b数组中的所有字节,写入输出流

  1. 创建FileInputStream,并指定文件路径(提前抛出异常-查找不到文件)

  2. 写入文件write();

    2.1 一次读取一个字节

    2.2一次读取多个字节 getBytes();如果不覆盖式添加,前面要加true

  3. 关闭

package byteStream;
public class Demo2 

2.3字节流复制文件

  1. 创建流

    1.1文件字节输入流

    1.2文件字节输出流

  2. 一边读,一边写

  3. 关闭

package byteStream;
public class Demo3

2.4BufferedFile(In)OutputStream(字节缓冲流)的使用

  • 缓冲流 BufferedFileInputStream/BufferedFileOutputStream
  • 特点
    1. 提高IO效率,减少访问磁盘的次数
    2. 数据存储在缓冲区内,flush是将缓冲区的内容写入文件中,也可以直接close

使用BufferedFileInputStream输出文件

  1. 创建 BufferedFileInputStream

  2. 读取(有所不同)

    也可以自己创建一个缓冲区

  3. 关闭

package byteStream;
public class Demo4

注意——参数类型不同
System.out.print((char)data);
System.out.println(new String(buf,0,count));

使用字节缓冲流BufferedFileOutputStream写入文件

  1. 创建 BufferedFileOutputStream
  2. 写入文件(先写入缓冲区)用flush();//写一次刷新一次就写入了
  3. 关闭
package byteStream;
public class Demo5 

2.5Object(In)OutpuItStream(对象流)的使用

ObjectInputStream/ObjectOutpuItStream

  • 增强了缓冲区功能

  • 增强了读写8种基本类型和字符串功能

  • 增强了读写对象的功能——使用流传输对象的过程称为序列化和反序列化

    read()object();从流中读取一个对象--反序列化

    writeObject(Object obj);向流中写入一个对象--序列化

  • 注意事项:

    1. 实现(反)序列化类,必须实现Serializable接口

    2. 实现(反)序列化类,对象属性(class)也要实现Serializable接口

    3. 序列化版本ID,可以保证序列化和反序列化的类是同一个类(不要去改,默认为同一个类(报错就改成一样的))

    4. 使用transient(瞬间)修饰的属性,这个属性就不能被序列化

    5. 静态属性(static)也不能序列化

    6. 序列化多个对象

      在序列化中加Student,在反序列化中加s2

      也可以使用ArrayList集合,序列化集合就可以了

实现序列化(写入流):ObjectOutpuItStream

  1. 创建对象流

  2. 实现序列化

    类必须实现一个接口Serializable(在Student中)

  3. 关闭

package byteStream;
public class Demo6

实现反序列化(输出流):ObjectInputStream

  1. 创建对象流

  2. 实现反序列化

    类必须实现一个接口Serializable(在Student中)

    原文件里没有就别读,会抛出异常

  3. 关闭

package byteStream;
public class Demo7

//原文件里没有就别读,会抛出异常 Student s2=(Student)ois.readObject();

3、字符流

常见的字符编码(当编码方式和读码方式不一致时,会出现乱码):

  • ISO-8859-1 收录除ASCII外,还包括西欧、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号

  • UTF-8 针对Unicode码表的可变长字符编码(国际编码)

  • GB2312 简体中文

  • GBK 简体中文、扩充

  • BIG5 台湾-繁体中文

    通过记事本(文件另存为)看文件是什么编码(不能用字节流来读取中文)

    1. 创建FileInputStream对象
    2. 读取
    3. 关闭
    package characterStream;
    public class Demo1 
    

3.1字符流(抽象类)

字符流的父类(抽象类):

  • Reader:字符输入流
  • Writer: 字符输出流

3.2FileReader(Writer)的使用

  • FileReader:public int read(char[] c)

    从流中读取多个字符,将读入数据存入到c数组,返回实际读到的字符数;如果到达文件底部,则返回-1

  • FileWriter: public void write(String str)

    一次写多个字符,将b数组中的所有字符,写入输出流

    字符流可以读中文

FileReader的使用

  1. 创建FileReader 文件字符输入流

  2. 读取

    2.1单个字符读取

    2.2多个字符读取

  3. 关闭

package characterStream;
public class Demo2 

FileWriter的使用

  1. 创建FileWriter对象

  2. 写入

    记着写入要刷新一下flush

  3. 关闭

package characterStream;
public class Demo3 

3.3字符流复制文件

FileReader(Writer)只能复制文本文件,不能复制图片、声音和视频等二进制文件

  1. 创建FileReader(Writer)
  2. 读写
  3. 关闭
package characterStream;
public class Demo4

3.3BufferedReader(Writter)(字符缓冲流)的使用

  • 高效读写

  • 支持输入换行符

  • 可一次写一行、读一行

    BufferedReader的使用

  1. 创建缓冲流

  2. 读取

    2.1字符串读取
    2.2一行一行的读取 readLine

  3. 关闭

package characterStream;
public class Demo5

BufferedWritter的使用

  1. 创建缓冲流

  2. 写入

    bw.newLine();//写入一个换行

  3. 关闭

package characterStream;
public class Demo6

4、PrintWriter(打印流)

  • 支持写入后换行
  • 支持数据原样打印
    1. 创建一个打印流
    2. 打印println方法
    3. 关闭
package printStream;
public class Demo1

5、(桥)转换流

(桥)转换流 :InputStreamReader/OutputStreamWriter(字节流和字符流的抽象类和在了一起)

  • 可将字节流准换为字符流

  • 可设置字符的编码方式

  • 的字符编码(当编码方式和读码方式不一致时,会出现乱码):

    • ISO-8859-1 收录除ASCII外,还包括西欧、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号
    • UTF-8 针对Unicode码表的可变长字符编码(国际编码)
    • GB2312 简体中文
    • GBK 简体中文、扩充
    • BIG5 台湾-繁体中文
    1. 创建InputStreamReader,并指定编码方式
      使用的编码要和文件编码方式一致(或者将文件另存为更改编码格式)
    2. 读取文件
    3. 关闭
package reverseStream;
public class Demo1 
  1. OutputStreamWriter写入文件,并指定编码
  2. 写入
  3. 关闭
package printStream;
public class Demo2

6、File类

对文件进行操作

file类

6.1 file类的使用

  • 分隔符

    System.out.println("路径分隔符"+ File.pathSeparator);//;
    System.out.println("名称分隔符"+File.separator);//\
    
  • 文件操作

    1. 创建文件creatNewFile

      判断是否创建成功

      File file=new File("D:\\Java-Code\\Process\\Process3\\e.txt");
      boolean b=file.createNewFile();//判断是否创建成功
      System.out.println("创建结果:"+b);
      
    2. 删除文件

      2.1直接删除

      2.2使用jvm退出时删除deleteOnExit

      file.deleteOnExit();
      Thread.sleep(5000);//休眠5秒钟
      
    3. 获取文件信息

      System.out.println("获取文件的绝对路径"+file.getAbsolutePath());
      System.out.println("获取路径"+file.getPath());//写的什么路径就是什么路径
      System.out.println("获取名称"+file.getName());
      System.out.println("获取父目录"+file.getParent());
      System.out.println("获取文件长度"+file.length());
      System.out.println("文件创建时间"+new Date(file.lastModified()).toLocaleString());
      
    4. 判断

      System.out.println("是否可写"+file.canExecute());
      System.out.println("是否为文件"+file.isFile());
      System.out.println("是否隐藏"+file.isHidden());
      
  • 文件夹操作(与文件操作类似)

    1. 创建文件夹

    2. 删除文件夹

      2.1直接删除-删除最底层目录(且最底层目录必须为空)

      System.out.println("删除结果:"+dir.delete());//删除最底层目录(且最底层目录必须为空)
      

      2.2使用jvm退出时删除deleteOnExit-System.out.println("删除结果:"+dir.delete());//删除最底层目录(且最底层目录必须为空)

    3. 获取文件夹信息

      文件夹没有长度

    4. 判断

      文件夹没有是否可写

    5. 遍历文件夹

      File dir2 = new File("D:\\Java-Code\\Process\\Process3");
      String[] files = dir2.list();
      System.out.println("==================");
      for(String string : files){
          System.out.println(string);
      }
      
package fileManage;
public class Demo1

6.2FileFileter接口

public interface FileFilter

  • boolean accept(File pathname)

  • 当调用File类中的listFile()方法时,支持传入FileFilter接口实现类,对获取文件进行过滤,只有满足条件的文件才可以出现在返回值中

    File[] files1 = dir2.listFiles(new FileFilter() {
        @Override
        public boolean accept(File pathname) {
            if (pathname.getName().endsWith(".jpg")) {
                return true;
            }
            return false;
        }
    });
    for(File file : files1) {
        System.out.println(file.getName());
    }
    
package fileManage;
public class Demo1

6.3递归遍历和递归删除(要用再学)

标签:字节,process3,class,IO,println,序列化,public,out
From: https://www.cnblogs.com/moulixu/p/18352393

相关文章

  • MinIO部署
    基于CentOS7.9使用MinIO的官方预编译二进制文件来完成同时设置HTTPS、添加用户认证等以下是安装步骤:1.添加MinIO用户和组首先,创建一个专门用于运行MinIO的系统用户和组。这有助于提高安全性并遵循最佳实践。sudogroupaddminiosudouseradd-gminiominio2.下......
  • 怎么用Stable Diffusion做设计解题?
    前言前言此篇不是StableDiffusion的软件教程,而是面向AIGC绘图工作流的一些开阔性思路与方法分享,核心观点即“商业需求是题面,AIGC是计算工具,解题思路还得是设计师!”,总之面对AIGC设计不要焦虑也不用回避,本篇笔者期望能够和大家一起探讨AIGC绘图如何为我所用,如何融入设计......
  • 洛谷 CF896C Willem, Chtholly and Seniorious之珂朵莉树板子
    洛谷CF896C题解传送锚点摸鱼环节Willem,ChthollyandSeniorious题面翻译【题面】请你写一种奇怪的数据结构,支持:\(1\)\(l\)\(r\)\(x\):将\([l,r]\)区间所有数加上\(x\)\(2\)\(l\)\(r\)\(x\):将\([l,r]\)区间所有数改成\(x\)\(3\)\(l\)\(r\)\(x\):输出将\(......
  • 数值稳定性:Fixing NaN Gradients during Backpropagation in TensorFlow
    数值稳定性:FixingNaNGradientsduringBackpropagationinTensorFlow......
  • 『SD』Stable Diffusion WebUI 安装插件(以汉化为例)
    前言本文简介StableDiffusionWebUI是允许用户自行安装插件的,插件的种类有很多,有将页面翻译成中文的插件,也有提示词补全插件,也有精细控制出图的插件。以汉化为例,StableDiffusionWebUI默认是英文的,我们只需装个汉化插件然后重启一下项目就能把页面变成中文了。安装......
  • 升级到iOS 18、降级回iOS 17
    热烈欢迎,请直接点击!!!进入博主AppStore主页,下载使用各个作品!!!注:博主将坚持每月上线一个新app!! 苹果官方下载链接:【操作系统OperatingSystems】:https://developer.apple.com/download/【应用Applications】:https://developer.apple.com/download/applications/【描述文件Pr......
  • 【ACM出版,见刊检索快速稳定】第四届物联网与机器学习国际学术会议(IoTML 2024,8月23-25)
    2024年第四届物联网与机器学习国际学术会议(IoTML2024)将于2024年8月23-25日在中国南昌召开。会议将围绕着物联网和机器学习开展,探讨本领域发展所面临的关键性挑战问题和研究方向,以期推动该领域理论、技术在高校和企业的发展和应用,为专注于该研究领域的创新学者、工程师和......
  • nagios 飞信(fetion) 短信报警
    nagios飞信(fetion)短信报警张映发表于2012-04-25分类目录:服务器相关前面提到nagios用邮件来发邮件报警,如果能将报警信息发到手机上来不是更好。其实手机上也可以使用邮箱的。邮箱和手机绑定一下就行了。下面说一下,centos6.064位的系统下,用飞信来发报警信息。一,安装所要......
  • Element学习(axios异步加载数据、案例操作)(5)
    1、这次学习的是上次还未完成好的恶element案例,对列表数据的异步加载,并渲染展示。——>axios来发送异步请求(1)(2)在vue当中安装axios(注意在当前的项目目录,并且安装完之后再将项目重启一下)(3)这里我用到数据的url地址为:https://mock.apifox.cn/m1/3128855-0-default/emp/list......
  • [jetson]jetson上torchvision源码下载地址汇总jetson上安装torchvision方法
    这个是jetson上使用的torchvision源码,解压后使用sudopython3setup.pyinstall即可安装,编译大约耗时30分钟完成,请耐心等待,安装这个源码之前您必须安装好由nvidia官方提供对应torchwhl文件,因此需要必须先安装好pytorch才能使用源码编译。目前我主要用这个源码给同学们安装......