几种IO流读写文件

几种IO流读写文件一、超类:字节流:InputStream(读入流)OutputStream(写出流)字符流:Reader(字符读入流)Writer(字符写出流)二、文件操作流字节流:FileInputStream,FileOutputStream字符流:FileReader,FileWriter(用法与字节流基本相同,不写)//1.指定要读

大家好,又见面了,我是你们的朋友全栈君。

一、超类:
字节流: InputStream(读入流) OutputStream(写出流)
字符流: Reader(字符 读入流) Writer (字符写出流)

二、文件操作流
字节流: FileInputStream ,FileOutputStream
字符流: FileReader, FileWriter(用法与字节流基本相同,不写)

        //1.指定要读 的文件目录及名称
        File file =new File("文件路径");
        //2.创建文件读入流对象
        FileInputStream fis =new FileInputStream(file);
        //3.定义结束标志,可用字节数组读取
        int i =0 ;
        while((i = fis.read())!=-1){ 
            //i 就是从文件中读取的字节,读完后返回-1
        }
        //4.关闭流
        fis.close();
        //5.处理异常
        //1.指定要写到的文件目录及名称
        File file =new File("文件路径");
        //2.创建文件读入流对象
    FileOutputStream fos =new FileOutputStream(file);
        //3.定义结束标志
        fos.write(要写出的字节或者字节数组);
        //4.刷新和关闭流
        fos.flush();
        fos.close();
        //5.处理异常

三、缓冲流:
字节缓冲流: BufferedInputStream,BufferedOutputStream
字符缓冲流:BufferedReader ,BufferedWriter
缓冲流是对流的操作的功能的加强,提高了数据的读写效率。既然缓冲流是对流的功能和读写效率的加强和提高,所以在创建缓冲流的对象时应该要传入要加强的流对象。

//1.指定要读 的文件目录及名称
        File file =new File("文件路径");
        //2.创建文件读入流对象
        FileInputStream fis =new FileInputStream(file);
        //3.创建缓冲流对象加强fis功能
BufferedInputStream bis =new BufferedInputStream(fis); 
        //4.定义结束标志,可用字节数组读取
        int i =0 ;
        while((i = bis.read())!=-1){ 
            //i 就是从文件中读取的字节,读完后返回-1
        }
        //5.关闭流
        bis.close();
        //6.处理异常
        //1.指定要写到的文件目录及名称
        File file =new File("文件路径");
        //2.创建文件读入流对象
    FileOutputStream fos =new FileOutputStream(file);
        //3.创建缓冲流对象加强fos功能
BufferedOutputStream bos=new BufferedOutputStream(fos);
        //4.向流中写入数据
        bos.write(要写出的字节或者字节数组);
        //5.刷新和关闭流
        bos.flush();
        bos.close();
        //6.处理异常

由以上看出流的操作基本相同,此流与文件流操作是几乎一样的只是将文件流作为参数传入缓冲流的构造方法中堆文件流读写文件的功能进行加强
注1:在字符读入缓冲流BufferedReader 中还提供了读一行的方法 readLine() 可以读取一行文本
在字符写出缓冲流BufferedWriter 中还提供了写人一个行行分隔符的方法writeLine(),用于写出时换行
注2:此处用到的是GoF设计模式中的装潢(装饰)模式
注3:创建缓冲流的对象的装逼模式:

BufferedInputStream bis =new BufferedInputStream(
new FileInputStream(new File("文件路径")));     

注4:缓冲流参数只要是一中超类的子类就行

四、对象流
ObjectInputStream ,ObjectOutputStream
不同于以上两种类型的流这里只能用字节对对象进行操作原因可以看上篇的编码表比照原理

ObjectOutputStream对象的序列化:
将java程序中的对象写到本地磁盘里用ObjectOutputStream
eg:将Person类的对象序列化到磁盘

1.创建Person类
    注1:此类要实现Serializable接口,此接口为标志性接口
    注2:此类要有无参的构造函数
    注3:一旦序列化此类不能再修改
    class Person implements Serializable{ 
   
        public Person(){}
    } 
2.创建对象流对象
    注:要增强功能可以将传入文件缓冲流
    ObjectOutputStream oos =new ObjectOutputStream(
    new FileOutputStream(new File("文件路径")));
3.写入对象 ,一般会将对象用集合存储起来然后直接将集合写入文件
    List<Person> list =new ArrayList<>();
    list.add(new Person());
    ...(可以添加多个)
    oos.writeObject(list);
4.关闭流,处理异常
    oos.flush();
    oos.close();

ObjectInputStream对象的反序列化:
从本地磁盘里用ObjectInputStream将对象文件读入java程序

1:用集合接收的时候要强转
1.创建对象流对象
    ObjectInputStream ois =new ObjectInputStream(
    new FileInputStream(new File("文件路径")));
2.读入对象
    List<Person> list =new ArrayList<>();
    List =(List<Person>)ois.readObject();
3.关闭流,处理异常
    ois.close();

五、转换流:
这类流是用于将字符转换为字节输入输出,用于操作字符文件,属于字符流的子类,所以后缀为reader,writer;前缀inputstream,outputstream;注 :要传入字节流作为参赛
InputStreamReader: 字符转换输出流
OutputStreamWriter:字符转换输入流

需求:读取键盘输入的一行文本,再将输入的写到本地磁盘上
//1.获取键盘输入的字节流对象in
InputStream in =Stream.in; 
/*2.用转换流将字节流对象转换为字符流对象,方便调用字符缓冲流的readeLine()方法*/
InputStreamReader isr =new InputStreamReader(in);
/*5.创建字符转换输出流对象osw,方便把输入的字符流转换为字节输出到本地文件。*/
OutputStreamWriter osw =new OutputStreamWriter(new 
    FileOutputStream(new File("文件名"))); 

/*3.现在isr是字符流,可以作为参数传入字符缓冲流中*/
BufferedReader br =new BufferedReader(isr);

/*4.可以调用字符缓冲流br的readLine()方法度一行输入文本*/
String line =null;
while((line =br.readLine()){
    osw.write(line);//osw是字符流对象,可以直接操作字符串

}


注:InputStreamReader isr =new InputStreamReader(new "各种类型的字节输入流都行即是:后缀为InputStream就行");
OutputStreamWriter osw =new OutputStreamWriter(new 
    "后缀为OutputStream就行"); 

六、区别记忆
1.对象流是可以读写几乎所有类型的只要是对象就行,而字节字符流,只能读写单个字节字符或者字节字符数组,以上没有读写字节字符数组的;注意对象流只有字节流!
2.字符和字节循环读入的结束条件int i=0; (i =fis.read())!=-1
用字符数组复制文件(fr 读入流 ,fw写出流),字节流也是相同的用法

  int i = 0;
  char[] c = new char[1024];  
     while((i = fr.reade()) !=-1)){
         fw.write(c,0,i);
     }

3.对象流里面套缓冲流的情景:
new ObjectInputStream(new BufferedInputStream(new FileInputStream(new File(“文件路径”))));

4.记忆流及其功能的方法:
前缀表示功能,后缀表示流的类型;
比如说FileInputStream 前缀:File,表示操作的磁盘,后缀:intputstream,表示是字节输入流。
同理 FileReader:表示操作文件的字符流
ObjectInputStream :操作对象的字节输入流

5.拓展:获取键盘输入的字符的缓冲流的写法:
new BufferedReader(new InputStreamReader(System.in)));
将字节以字符形式输出到控制台的字符缓冲流的写法:
new BufferedWriter( new OutputStreamWriter(System.out))

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144921.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月18日 下午2:00
下一篇 2022年5月18日 下午2:00


相关推荐

  • 快商通肖龙源:从智能客服到智能营销,客服中心迎来价值升级节点

    快商通肖龙源:从智能客服到智能营销,客服中心迎来价值升级节点营销智能化市场有多大 根据艾瑞研究的最新报告显示 自 2017 年开始 每年保持在 14 的增速在扩张 并且到 2021 年将成为 2 万亿级别的市场 简单去理解营销智能化 就是以科技化的工具来提升获客效率 在产业市场中 红海总比蓝海多 红海的竞争 在获客和管理工具上优化 意味着效率和整体利润的提升 任何一个企业主对于如何提升获客效率都是渴求的 近年来 消费医疗渐渐发展为红海市场 获客成本日益飙升 而更加透明的市场环境 价格战等也带来了客单价的下滑 如何更低成本地投放获客 成为了创造利润的命脉 快商通董事长肖龙源分享了

    2026年3月18日
    2
  • Eclipse汉化教程(详细图解)

    Eclipse汉化教程(详细图解)eclipse语言包下载:http://www.eclipse.org/babel/downloads.php1、打开浏览器,浏览“参考资料”内给出的“eclipse语言包下载”地址,在博客新页面找到地址链接,如图所示。“BabelLanguage…”开头的一栏下面就是各个eclise版本的语言包,2、目标锁定“BabelLanguagePackUpdateSiteforNeon”

    2022年6月5日
    153
  • navicat15.0.22激活码【在线注册码/序列号/破解码】

    navicat15.0.22激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    90
  • 请说明 Iaas Paas 和 Saas 分别提供的服务和特点_一张图读懂咖啡

    请说明 Iaas Paas 和 Saas 分别提供的服务和特点_一张图读懂咖啡编译:老夫子原文:https://www.bmc.com/blogs/saas-vs-paas-vs-iaas-whats-the-difference-and-how-to-choose/从小型企业到全球企业,云都是一个非常热门的话题,它是一个非常广泛的概念,涵盖了很多在线领域。无论是应用程序还是基础架构部署,当您开始考虑将业务转移到云时,了解各种云服务的差异和优势比以往任何时候…

    2022年10月17日
    5
  • 数据库SQL命令大全

    数据库SQL命令大全一 关于数据库的 SQL 命令 1 创建数据库 CREATEDATABA 数据库名称 ON FILEGROUP 文件组名称 NAME 数据文件逻辑名称 FILENAME 路径 数据文件名 SIZE 数据文件初始大小 MAXSIZE 数据文件最大容量 FILEGROWTH 数据文件自动增长容量 LOGON NAME 日志文件逻辑名称 FILENAME 路径 日志文件名 SIZE 日志文件初始大小 MAXSIZE 日志文件最大容量 FILEGROWTH

    2026年3月19日
    3
  • c++实现skipList「建议收藏」

    c++实现skipList「建议收藏」SkipList是一种随机化的数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(logn)平均时间)。基本上,跳跃列表是对有序的链表增加上附加的前进链接,增加是以随机化的方式进行的,所以在列表中的查找可以快速的跳过部分列表(因此得名)。所有操作都以对数随机化的时间进行。SkipList可以很好解决有序链表查找特定值的困难。跳表是平衡树的一种替代的数…

    2022年8月30日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号