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

Java基础中级进阶篇二之IO流(IO流、嵌套类、多线程)

1.IO流

1.1 File类

  1. 定义:是用来操作文件或目录属性而不可以操作文件内容的类。
  2. 作用:
  • 操作文件及目录的属性
  • 不可操作文件内容
  • 创建文件及目录
  • 删除文件及目录

 使用    File类中的构造方法

import java.io.File; public class FileCreateDemo { public static void main(String[] args) { // 第一种构造方法:直接传入完整路径 File f1 = new File("D:/myDir/hello.txt"); System.out.println("方式一:" + f1.getAbsolutePath()); // 第二种构造方法:父路径 + 子路径(字符串形式) File f2 = new File("D:/myDir", "hello.txt"); System.out.println("方式二:" + f2.getAbsolutePath()); // 第三种构造方法:父File对象 + 子路径 File parent = new File("D:/myDir"); File f3 = new File(parent, "hello.txt"); System.out.println("方式三:" + f3.getAbsolutePath()); } } 输出结果: 方式一:D:\myDir\hello.txt 方式二:D:\myDir\hello.txt 方式三:D:\myDir\hello.txt

1.1.1 FIle类中操作文件的常用方法

方法

说明

  boolean canRead()

检查能否读取指定文件

boolean canWrite()

检查能否写入指定文件

boolean equals(Object obj)

将指定对象与调用函数的对象进行比较

boolean exists()

测试文件是否存在

boolean isFile()

测试此对象表示的文件是否是普通文件

boolean createNewFile()

创建空文件

boolean delete()

删除此对象指定的文件

String getName()

返回此对象表示的文件的名称

String getAbsolutePath()

返回此对象表示的文件的绝对路径名

boolean isDirectory()

测试此File对象表示的文件是否是目录

boolean mkdir()

创建由该File对象表示的目录

boolean mkdirs()

创建包含父目录的目录

String getParent()

返回此File对象的路径名的上一级,如果路径名没有上一级,则返回null

File[] listFiles ()

获取此File目录对象下所有的

文件及目录

1.2 IO流

  1. 定义:IO流是一组有序的用于程序输入和输出操作的数据序列
  2. 特点:具有方向性,用于程序输入和输出操作
  3. 分类:

IO包中的类层结构

输入输出机制

1.2.1 按流向分类

  1. 输出流
  2. 输入流

1.2.2 按数据单元分类

  1. 字节流
  2. 字符流

1.2.2.1 字节流
  1. 定义::是以8位字节为数据单元的IO流
  2. 特点:以8位字节为数据单元,操作文件的输入和输出
  3. 分类:InputStream类(字节输入流类)OutputStream(字节输出流类
inputStream类

类层结构

常用方法

方法

说明

int read()

读取单个字节到程序,以int型返回所读取的字节数据,返回值为-1表示读取到了文件的末尾

int read(byte[] b)

读取多个字节到程序,并存储在字节数组中,返回实际读取的字节数,返回值为-1表示读取到了文件的末尾

void close()

关闭输入流

FileInputStream类:是继承自InputStream抽象类的、以字节为数据单元读取文件内容的类

import java.io.FileInputStream; import java.io.IOException; public class FileInputStreamDemo { public static void main(String[] args) { FileInputStream fis = null; try { // 1. 创建FileInputStream对象 fis = new FileInputStream("D:/hello.txt"); // 2. 通过read方法读取文件内容 int b; String result = ""; while ((b = fis.read()) != -1) { result += (char) b; } System.out.println("文件内容:" + result); } catch (IOException e) { e.printStackTrace(); } finally { // 3. 通过close方法关闭流 if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
OutputStream类

类层结构:

常用方法:

方法

说明

void write(int b)

将指定的字节输出到输出流中

void write(byte[] b)

将字节数组输出到输出流中

void close()

关闭输出流

FileOutputStream类:是继承自OutputStream抽象类的、以字节为数据单元写入文件内容的类

import java.io.FileOutputStream; import java.io.IOException; public class FileOutputStreamDemo { public static void main(String[] args) { FileOutputStream fos = null; try { // 1. 创建FileOutputStream对象 fos = new FileOutputStream("D:/hello.txt"); // 2. 通过write方法写入文件内容 fos.write("Hello Java".getBytes()); System.out.println("文件写入成功!"); } catch (IOException e) { e.printStackTrace(); } finally { // 3. 通过close方法关闭流 if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
1.2.2.2 字符流
  1. 定义:字符流是以16位字符为数据单元的IO流
  2. 特点:以16位字节为数据单元,操作文件的输入和输出
  3. 分类:Reader类,Writer类
Reader类

类层结构:

常用方法:

方法

说明

int read()

读取单个字符,当返回值为-1时表示读取到了文件的末尾

int read(char[] c)

读取多个字符,保存到字符数组c中,返回实际读取的字符数,当返回值为-1时表示读取到了文件的末尾

void close()

关闭输入流

为何使用FileRader:是继承自Reader抽象类的、以字符为数据单元读取文件内容的类

import java.io.FileReader; import java.io.IOException; public class FileReaderDemo { public static void main(String[] args) { // 传统 try-catch-finally 写法 FileReader fr = null; try { // 1. 创建FileReader对象 fr = new FileReader("D:/木兰诗.txt"); // 2. 通过read方法读取文件内容 int c; StringBuilder result = new StringBuilder(); while ((c = fr.read()) != -1) { result.append((char) c); } System.out.println(result.toString()); } catch (IOException e) { e.printStackTrace(); } finally { // 3. 通过close方法关闭流 if (fr != null) { try { fr.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
import java.io.FileReader; import java.io.IOException; public class FileReaderDemo { public static void main(String[] args) { // 使用 try-with-resources,自动关闭流 JDK7+版本写法, //不过现在大部分的写法都还是使用传统写法 //这个写法可以自动关闭流,是因为IO类实现了Closeable接口,而这个接口的父类是AutoCloseable try (FileReader fr = new FileReader("D:/木兰诗.txt")) { int c; StringBuilder result = new StringBuilder(); while ((c = fr.read()) != -1) { result.append((char) c); } System.out.println(result.toString()); } catch (IOException e) { e.printStackTrace(); } } }
Writer类

类层结构:

常用方法:

方法

说明

void write(String str)

将str字符串里包含的字符输出到指定的输出流中

void close()

关闭输出流

void flush()

清空流

FileWirter类(当需要用程序向磁盘文件写入中文内容时使用):继承自Writer抽象类的、以字符为数据单元写入文件内容的类

// 如何使用FileWriter类向磁盘文件中写入中文内容? import java.io.FileWriter; import java.io.IOException; public class FileWriterDemo { public static void main(String[] args) { FileWriter fw = null; try { // 1. 创建FileWriter对象 fw = new FileWriter("D:/木兰诗.txt"); // 2. 通过write方法写入文件内容 fw.write("唧唧复唧唧,木兰当户织。"); } catch (IOException e) { e.printStackTrace(); } finally { // 3. 通过close方法关闭流 if (fw != null) { try { fw.close(); } catch (IOException e) { e.printStackTrace(); } } } } }

1.2.3 按角色分类

1.2.3.1 节点流
  1. 作用:节点流是可以直接对特定的IO设备读取或写入数据的IO流
1.2.3.2 处理流
  1. 作用:处理流是用来包装节点流的、处理输入/输出功能的IO流,为节点流增强功能
  2. 分类:
处理流 (Process Stream) │ ├── 打印处理流 (Print Stream) │ ├── PrintStream │ └── PrintWriter │ ├── 转换处理流 (Conversion Stream) │ ├── InputStreamReader │ └── OutputStreamWriter │ ├── 缓冲处理流 (Buffered Stream) │ ├── BufferedInputStream │ ├── BufferedOutputStream │ ├── BufferedReader │ └── BufferedWriter │ └── 数据处理流 (Data Stream) ├── DataInputStream └── DataOutputStream
缓冲处理流
  1. 定义:缓冲流是以提高读写性能为目的的,具备缓冲区的处理流
  2. 目的或作用:提高节点流的读写性能,具备缓冲区,用缓冲区来完成数据的IO操作。
  3. 分类:
  • BufferedInputStream字节缓冲输入流
  • BufferedOutputStream字节缓冲输出流
  • BufferedReader字符缓冲输入流
  • BufferedWriter字符缓冲输出流
BufferedInputStream字节缓冲输入流

常用方法:

方法

说明

BufferedInputStream(InputS

http://www.jsqmd.com/news/931184/

相关文章:

  • 反洗钱平台-互联网平台反洗钱系统全景设计
  • ncmdump:突破网易云音乐NCM加密的智能解密工具,5分钟解锁音乐自由
  • 长沙民办中职院校排行 5所合规办学机构实力解析 - 互联网科技品牌测评
  • 如何实现谷歌秒收录?让爬虫每天多抓500次的底层逻辑
  • 3步安装OmenSuperHub:终极免费的暗影精灵笔记本硬件管理工具
  • 南宋历代皇帝完整脉络全解析:偏安江南的百年抗争与崖山终章
  • 3步打造专业级无线网络安全测试:Fluxion钓鱼页面深度解析
  • MapStruct 与 Lombok 协作的注解处理器执行顺序分析
  • 公链革命2.0:Layer 1与Layer 2如何重构区块链开发者的黄金时代
  • m4s转MP4完整指南:3分钟解锁B站缓存视频的终极解决方案
  • MapLibre GL JS第36课:一个Source配置多个图层样式
  • 【收藏干货】2026 新版大模型转行全攻略:零基础小白、在职程序员转行避坑指南
  • FlipIt翻页时钟:Windows桌面上的时光艺术,告别Flash的复古新选择
  • 如何快速解密.NET混淆代码:de4dot终极完整指南
  • 用AI翻译你的WordPress —— WordPress AI Generator 2.4.0发布
  • PLC项目开发流程详解:从需求分析到现场调试
  • 嘉兴修漏水哪家好|2026嘉兴靠谱防水补漏、全屋漏水维修分区推荐 - 吉修匠
  • 基于仿生机械手的肌动传感器动作识别解析方案【附仿真】“
  • 谷歌秒收录需要什么条件?解决“发现未索引”报错的3步急救法
  • 微博舆情监控:定时爬取热点话题,通过NLP判断正负面情绪。微博舆情监控实战:基于定时爬取与NLP情感分析的Python实现
  • 3步解决抖音内容采集难题:你的自动化下载工作流指南
  • 空间计算在未来大有前景
  • Palworld存档修复终极指南:如何在不同服务器间无缝迁移游戏进度
  • 终极指南:掌握RPFM游戏模组开发的10个关键技术
  • rpm方式安装minio
  • 聊一聊TCP:三次握手我背了100遍,TIME_WAIT还是把我问住了
  • 给资产装上“数字翅膀”:RWA系统开发者的千亿级造富风口
  • 抖音创作者作品批量下载神器:5分钟掌握高效视频采集
  • 成都角钢公司|角钢厂家|角钢批发推荐|四川盛世钢联国际贸易有限公司供应 - 四川盛世钢联营销中心
  • YACReader终极指南:如何打造你的个人漫画图书馆