当前位置: 首页 > 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.rkmt.cn/news/1442517.html

相关文章:

  • 南宋历代皇帝完整脉络全解析:偏安江南的百年抗争与崖山终章
  • 3步打造专业级无线网络安全测试:Fluxion钓鱼页面深度解析
  • 如何快速解密.NET混淆代码:de4dot终极完整指南
  • FlipIt翻页时钟:Windows桌面上的时光艺术,告别Flash的复古新选择
  • 基于仿生机械手的肌动传感器动作识别解析方案【附仿真】“
  • 聊一聊TCP:三次握手我背了100遍,TIME_WAIT还是把我问住了
  • 3PEAK思瑞浦 TPA6031-S5TR SOT23-5 运算放大器
  • 500+网站支持:WebToEpub如何将任意网页小说转换为标准EPUB电子书
  • m4s-converter:轻松解锁B站缓存视频的免费转换神器
  • 2026河南新乡昆虫标本厂家实力排行推荐:合规性与性价比对比 - 奔跑123
  • STM32智能温控系统:3步打造你的第一个嵌入式PID控制器
  • 网盘直链下载助手:免费开源工具,3分钟突破六大网盘下载限速
  • 开发者对接大模型 API 太繁琐?CenToken 帮你省 80% 时间
  • Linux Shell 脚本入门、执行方式与批量压解实战
  • Sora 2生成长视频崩溃频发?独家披露GPU显存碎片化监控脚本+TensorRT优化配置(实测A100 80G吞吐提升3.2倍)
  • TV Bro:专为Android电视设计的终极遥控器友好浏览器解决方案
  • 3分钟解锁Minecraft RTX光影新境界:BetterRTX安装器深度体验
  • 今年北京车展,为什么那么多设计“撞脸”?
  • 如何用STM32快速构建智能温控系统:完整嵌入式开发实战指南
  • 山东大学软件学院项目实训——计科智伴(六)——前后端接口全面对齐、成就体系与 RAG 兜底
  • 我找到的国内直连 GPT 5.5 / Claude Opus 低成本方案
  • WindowResizer终极指南:3分钟掌握窗口强制调整技巧
  • Fusion360一体化设计:从零打造自定义按钮盒的完整指南
  • 【C++基础】循环嵌套
  • 2026 折叠棋牌桌选购避坑,拆机测评选材,稳固低故障棋牌桌源头品牌推荐 - 品牌榜中榜
  • 精通GTA5高级游戏增强:YimMenu架构深度解析与实战配置
  • 原神与崩坏:星穹铁道帧率解锁完整指南:如何轻松突破60帧限制
  • 【Sora 2时尚设计视频实战指南】:零基础7天生成高商业价值AI时装秀视频
  • Sora 2视频放大效果翻车率高达63%?资深CV架构师紧急发布「增强可信度评估协议v1.2」
  • ZLToolKit 源码分析(二):线程同步原语 semaphore 与 onceToken