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

第10章 输入与输出流

10.1 File类

public StringgetName():获取文件的名字。

publicboolean canRead():判断文件是否为可读的。

publicboolean canWrite():判断文件是否可被写人。

publicboolean exists():判断文件是否存在。

public long length():获取文件的长度(单位是字节)。

public StringgetAbsolutePath():获取文件的绝对路径

public StringgetParent():获取文件的父目录。 

publicboolean isFile():判断文件是否为一个普通文件,而不是目录。

publicboolean isDirectory():判断文件是否为一个目录。

publicboolean isHidden():判断文件是否为隐藏文件。

public longlastModified():获取文件最后修改的时间(时间是从1970年午夜至文件最后修改时刻的毫秒数)。

创建File对象本身一般不会发生异常,它只是对文件或目录路径进行抽象表示,不涉及实际的文件系统操作(如读写等可能引发异常的操作 )

10.2 文件字节输入流

FileInputStream是字节流,用于按字节读取文件内容

FileInputStream的read()方法:从输入流中读取一个字节的数据,返回值为读取到的字节数据(0 - 255 范围),若到达流末尾返回 -1 。它操作的是字节

10.3 文件字节输出流

FileReader按字符读取文件

10.4 文件字符输入和输出流

FileReader是字符流,主要用于按字符读取文本文件

FileReader的read()方法:从输入流中读取一个字符的数据,返回值为读取到的字符(Unicode 码值),若到达流末尾返回 -1 。它操作的是字符,内部会涉及字节到字符的解码转换

10.5 缓冲流

BufferedReader是用于缓冲读取字符的流,它不能直接指向字节流FileInputStream。需要通过InputStreamReader将FileInputStream转换为字符流后,才能作为参数传递给BufferedReader构造方法

BufferedWriter是字符缓冲输出流,FileWriter是用于写入字符到文件的流。可以通过BufferedWriter bw = new BufferedWriter(new FileWriter("文件路径"))的方式,让BufferedWriter指向FileWriter流,起到缓冲写入的作用

10.6 随机流

RandomAccessFile流指向文件只是建立了对文件的操作连接,并不会自动刷新文件。刷新操作一般是针对输出流中缓冲数据写入到文件等存储介质而言,RandomAccessFile本身指向文件时无此行为

10.7 数组流

10.8 数据流

向文件尾追加数据,需要使用FileOutputStream的追加模式。FileOutputStream有两个常用构造方法:

FileOutputStream(String name) :创建一个向指定文件写入数据的输出流,如果文件存在,会覆盖原有内容。

FileOutputStream(String name, boolean append) :当第二个参数append为true时,表示追加模式,即向文件尾追加数据;为false时(默认情况),表示覆盖模式 。

10.9 对象流

使用对象流写入或读入对象时,要保证对象是序列化的。

被序列化的类必须实现Serializable接口,否则会抛出NotSerializableException异常。

静态变量和用transient修饰的变量不会被序列化。反序列化时,类的结构和序列化时需保持一致(如类名、字段等),否则可能出现InvalidClassException等问题 。

注意对象引用的顺序和完整性,避免出现StreamCorruptedException等异常。

使用对象流很容易得获取一个序列化对象的克隆,只需将该对象写入到对象输出流,那么用对象输入流读回的对象一定是原对象的一个克隆。

要克隆对象,可利用对象序列化和反序列化机制。先将对象通过ObjectOutputStream写入字节数组输出流(或其他输出流),再通过ObjectInputStream从对应的输入流中读取,从而得到一个克隆对象。需确保对象所属类实现Serializable接口。

10.10 序列化与对象的克隆

10.11 使用Scanner解析文件

10.12 读写图像文件

10.13 文件对话框

10.14 带进度条的输入流

10.15 文件锁

相关文章:

  • Redis实现分布式锁的原始方式详解:从入门到实践
  • C++(23):容器类<vector>
  • 聊天的表情包+发小文件+图片操作
  • 《P5283 [十二省联考 2019] 异或粽子》
  • Hugo 安装保姆级教程(搭建个人blog)
  • 软件架构设计--期末复习
  • HiTool机顶盒刷机提示:网络下载TFTP超时,可能的原因如下
  • volatile
  • DeepSeek 赋能太空探索:从轨道优化到星际开拓的 AI 革命
  • DAY 29 复习日:类的装饰器
  • tauri2项目动态添加 Sidecar可行性方案(运行时配置)
  • 高能数造闪耀 CIBF 2025,以创新技术引领新能源智造新征程
  • 基于MCP的AI Agent应用开发实践
  • 【ComfyUI】关于ComfyUI的一些基础知识和入门设置以及快捷键小技巧【简单易懂】
  • 通过串口设备的VID PID动态获取串口号(C# C++)
  • Java基于数组的阻塞队列实现详解
  • 算法-js-柱状图中最大的矩形
  • Qt如何设置图标
  • 【PyQt5实战】五大对话框控件详解:从文件选择到消息弹窗
  • 等于和绝对等于的区别
  • 周慧芳任上海交通大学医学院附属上海儿童医学中心党委书记
  • 马上评|中药液涉嫌添加安眠药?药品安全儿戏不得
  • 中国首颗地质行业小卫星“浙地一号”成功发射
  • 湖南4个县市区被确定为野生蘑菇中毒高风险区:中毒尚无特效解毒药
  • 信俗与共:清代新疆回疆儒释道庙宇的中华政教
  • 从近200件文物文献里,回望光华大学建校百年