当前位置: 首页 > news >正文

[java基础揉碎]文件IO流

目录

文件

什么是文件

 文件流​编辑

常用的文件操作 

创建文件方式一 

创建文件方式二 

创建文件方式三

tip:为什么new file 了还有执行createNewFile?new File的时候其实是在内存中创建了文件对象, 还没有在磁盘中, 当执行createNewFile的时候才是往磁盘中写入​编辑

获取文件的信息 (常用)

目录的操作 (windows文件夹), 在java中目录也被当作一个文件,方式使用没有区别

Io流

 io原理即流的分类

​编辑

字节流常用子类

 文件输入流​编辑

文件输出流

文件拷贝

字符流

FileReader

FileWriter

close和flush都可以实现写入,但是close相等于flush我刷新还有个关闭

 节点流和处理流(包装流)

​编辑

处理流修饰器模式模拟

节点流和处理流的区别

BufferedReader使用方法 

 BufferedWriter使用方法 

字节处理流 

字节处理流视频拷贝使用方法 

对象流

​编辑

对象流的使用

​编辑

对象流的细节 

标准输入输出流 

转换流

InputStreamReader上面的问题用转换流后得到解决 

 OutputStreamWriter

字节打印流 

字符打印流

Properties


​​​​​​​文件

什么是文件

 文件流

常用的文件操作 

创建文件方式一 

 

创建文件方式二 

 

创建文件方式三

这里这样写也是可以的,反斜杠

tip:为什么new file 了还有执行createNewFile?
new File的时候其实是在内存中创建了文件对象, 还没有在磁盘中, 当执行createNewFile的时候才是往磁盘中写入

获取文件的信息 (常用)

 

目录的操作 (windows文件夹), 在java中目录也被当作一个文件,方式使用没有区别

 

Io流

 io原理即流的分类

字节流和字符流那个效率高呢?字符流(应用于文本文件等), 因为字符流的单位比字节大, 至于一个字符等于多少个字节需要看他的编码格式; 那为什么还用字节流呢? 因为还有一些二进制文件,例如声音文件,视频文件, word文件

 

字节流常用子类

 文件输入流

演示读取文件(这种方法不能有汉字,因为是一个字节一个字节读的, 汉字是三个字节,只读了一个, 就会乱码)
单个字节的读取,效率比较低

 

改为字节数组的方式,效率比较快

文件输出流

 

文件拷贝

 

一定要使用write(buf,0,readLen)这个方法写, 如果用 write(buf),在最后几个字节传输长度不够数组长度但是还是传了这么多的时候,图片不会显示

 

此时运行可能会报这个错,这是c盘需要管理员权限才能访问 , 所以可以改用其他盘上面测试 

 

字符流

FileReader

第二种方式, 效率会高一点

FileWriter

 

不关流不会成功写入 

 

 

第二种数组写入

第三种写入

 

第四种写入 

第五种写入 

 

close和flush都可以实现写入,但是close相等于flush我刷新还有个关闭

 节点流和处理流(包装流)

因为BufferedWriter的构造器传进去的是Writer, 也就是说继承了 Writer的子类都可以传进去, 这也是一种设计模式叫修饰器模式

处理流修饰器模式模拟

 

现在上面的FileReader和StringReader相当于节点流, 对单个数据源类别进行读取, 如果我们要扩展怎么扩展呢

将Reader作为一个属性, 同时通过构造器传进来, 因为继承了Reader就可以调用它的方法

现在给Reader_加两个未实现的方法

 在处理流里面, 调用传进来的字节流的方法

在处理流对象中就可以进行调用到字节流的读取

 

扩展:上面是示意写了两个方法, 其实可以统一为read:

其他的对应跟着改, 让他动态绑定去实现 

节点流和处理流的区别

 

BufferedReader使用方法 

 BufferedWriter使用方法 

文本文件拷贝的案例 

字节处理流 

字节处理流视频拷贝使用方法 

对象流

对象流的使用

序列化

 

反序列化

 

对象流的细节 

标准输入输出流 

 

转换流

字节转换为字符

 案例:

目前有一个utf-8的文件,去读取里面文件内容, 可以看到能正确读取

把它转为国标码之后(这个国标码每个国家有自己的国标码, 根据当前系统来看的, 如果当前系统用的是gbk那么国标码就是gbk)

 现在再来读取就会乱码

具体实现

 

InputStreamReader
上面的问题用转换流后得到解决 

 

 OutputStreamWriter

 

字节打印流 

 

 打印到文件

字符打印流

 打印到显示器, 因为传入的是标准输出

输出到指定文件中去 

如果不关流, 文件是进不去的 

 

Properties

传统的方式读取

传统的方法如果我们要获取指的的值,只能自己写判断, 其他的不要 

 用Properties

 

 

 

 

 

相关文章:

  • 监控易助力实现智能工厂数字化升级项目案例
  • 对象解构与迭代器的猫腻?
  • Go 使用 RabbitMQ---------------之一
  • Python零基础一天丝滑入门教程(非常详细)
  • layui扩展件(xm-select)实现下拉框
  • 【Python-基础】函数合集
  • EureKa是什么?
  • YOLOv10最详细全面讲解1- 目标检测-准备自己的数据集(YOLOv5,YOLOv8均适用)
  • clickhouse——ck目录介绍
  • 嵌入式要卷成下一个Java了吗?
  • Java高级面试问题及答案
  • 中科驭数驭云、超低时延网络案例双双入选第七届数字中国建设峰会数字化转型典型应用案例
  • C++ (week5):Linux系统编程3:线程
  • 数组-捡石子小游戏
  • 新零售数据中台:打造智能商业运营的核心引擎_光点科技
  • Docker 笔记(2):Dockerfile
  • flutter的key在widget list的作用以及必要性
  • JAVA SE 6 GC调优笔记
  • JavaScript服务器推送技术之 WebSocket
  • JS笔记四:作用域、变量(函数)提升
  • js作用域和this的理解
  • leetcode386. Lexicographical Numbers
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • magento2项目上线注意事项
  • MD5加密原理解析及OC版原理实现
  • miaov-React 最佳入门
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • python_bomb----数据类型总结
  • SOFAMosn配置模型
  • SpiderData 2019年2月23日 DApp数据排行榜
  • 动态规划入门(以爬楼梯为例)
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 排序(1):冒泡排序
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 我感觉这是史上最牛的防sql注入方法类
  • 我与Jetbrains的这些年
  • 优化 Vue 项目编译文件大小
  • 源码安装memcached和php memcache扩展
  • 回归生活:清理微信公众号
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 正则表达式-基础知识Review
  • #在 README.md 中生成项目目录结构
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (简单) HDU 2612 Find a way,BFS。
  • (四)JPA - JQPL 实现增删改查
  • (算法)N皇后问题
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)基于IDEA的JAVA基础1
  • (转载)Google Chrome调试JS
  • .NET CLR Hosting 简介
  • .NET Core跨平台微服务学习资源