首页 > 编程语言 >java IO整理及读写文件常见方式

java IO整理及读写文件常见方式

时间:2023-03-19 22:22:30浏览次数:40  
标签:字符 file java 字节 读写 IO path new String

一:流的概念和作用

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在设备间传输称之为流。

流的本质是数据传输,根据数据传输的特性将流区分为各种类,方便更直观的进行数据操作。

 

二:流的分类

  • 根据处理数据类型的不同分为:字符流和字节流
  • 根据数据流向不同分为:输入流和输出流

 2.1 字节流和字符流

字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别:

  • 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
  • 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。

更详细可参考:

https://www.cnblogs.com/cberblog/p/15480083.html

 2.2 输入和输出流

对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。  

 

三:IO流继承关系图

 

 

 

四:java读写文件常见方式

4.1一次读取所有文件
        String path = "/Users/changfan/test.txt";
        
        FileInputStream file = new FileInputStream(path);
        int available = file.available();
        byte[] bytes = new byte[available];

        int read = file.read(bytes);
        System.out.println(new String(bytes));
        file.close();
4.2 按行读取
        String path = "/Users/changfan/test.txt";
        BufferedReader bufferedReader = new BufferedReader(new FileReader(new File(path)));
        String line = null;
        int count =0 ;
        while ( null!=(line = bufferedReader.readLine())){
            System.out.println("第[" + count + "]行数据:[" + line + "]");
            count++;
        }

 

4.3 字节流按行读取

 
        String path = "/Users/changfan/test.txt";
        StringBuffer stringBuffer = new StringBuffer();
        InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(path), "UTF-8");
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        String s = bufferedReader.readLine();
        while (s!=null){
            stringBuffer.append(s).append("\r\n");
            s = bufferedReader.readLine();
        }

        System.out.println(stringBuffer);

 

4.4 写文件

        String s = "长帆";
        File file = new File("/Users/changfan/test1.txt");

        BufferedWriter bw = null;
        if (file.exists()){
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(fileOutputStream, "utf-8"));
            bufferedWriter.write(s);
            bufferedWriter.flush();
            bufferedWriter.close();
        }else {
            System.out.println("文件不存在");
        }

 

 

参考链接

https://zhuanlan.zhihu.com/p/25418336

https://www.cnblogs.com/cberblog/p/15480083.html

标签:字符,file,java,字节,读写,IO,path,new,String
From: https://www.cnblogs.com/changfan/p/17234558.html

相关文章

  • Collection单列集合总结
    这篇文章记录了Collection集合,List集合,Set集合在文章第七点总结了两大系列集合的五种实现类的区别,有需要的小伙伴可以直接去查看一、什么是集合集合是Java中存储对象......
  • GnuRadio-常见模块
    1、信号波形生成器(WaveformGenerators)(1)常数信源(ConstantSource)(2)噪声信源(NoiseSource)(3)信号源(SignalSource)例如正弦信号、方波信号等2、调制器(Modulators)(1)AM解调(AMDemo......
  • JAVA异常处理
    Java异常简介:JAVA异常处理的目的是为保证程序在出错之后,依旧可以执行一些其它操做。该操作可以是用户的其它行为,也可以是保存程序运行后的一些结果,还可以是合理的结束程......
  • JAVA -01(简单知识介绍)
    JAVA-01前期准备介绍1972年C诞生【两大问题:指针;内存管理】1982年C++诞生【面向对象;兼容C;图形领域和游戏,但是更复杂】1995年JAVA诞生【没有指针没有内存管理;面向对象......
  • 打牢JavaScript 基础,看这篇
    原文链接:​   ​​https://note.noxussj.top/?source=51cto​​变量声明​在JavaScript程序中,使用一个变量之前应当先声明。变量是使用关键字 ​​var​​ 来声明的......
  • Vue axios简易封装
    1.安装axiosnpminstallaxios-g 2.创建utils文件夹,新建文件request.js对axios进行封装3.设置请求超时通过axios.defaults.timeout设置默认的请求超时时间。例......
  • 你能说说Java深拷贝和浅拷贝区别吗
    引用拷贝创建一个指向对象的引用变量的拷贝。对象拷贝创建对象本身的一个副本。注:深拷贝和浅拷贝都是对象拷贝浅拷贝被复制对象的所有变量都含有与原来的对象相同......
  • iOS之RunLoop - 前期准备:RunLoop运行逻辑
    什么是RunLoop1-RunLoop即运行循环:在程序运行中循环做一些事情2-RunLoop应用范围① 定时器(Timer)、PerformSelector② GCDAsyncMainQueue③ 事件响应、手......
  • 如何在Power BI DAX Studio 中测试验证行级别安全性和对象级别安全性
    行级别安全性可控制用户访问指定行,对象级安全性可控制用户访问指定的列和表。下面通过DAXStudio工具测试验证行级别安全性和对象级安全性的权限控制。01设置PowerBI中的......
  • Java实现简易酒店管理系统
    实现订房退房查房退出四个基本功能酒店有三楼,每楼5个房间,房间号按照101,102,...201,202·有双人间,单人间,地铺间能实现订房退房查房等基本功能在控制台中实现,操作便捷一......