讲师中心 微信公众号
AI工具推荐 视频效率加速

死磕 IO 流?你都磕对地方了么

老强吖_2668

老强吖_2668

发布时间:2025-09-11 10:06:02

|

359人浏览过

|

来源于php中文网

原创

在日常开发中,我们经常会接触到 io 流,例如在处理文件上传下载、数据传输以及设计模式等方面。io 流是这些操作的基础,因此今天我们将深入探讨 java 中 io 流的相关知识点。

本文将涵盖以下主要内容:

  • 文件对象流概述
  • 字节流与字符流
  • 文件对象与文件路径
  • Java 标准库
    java.io
    提供了
    File
    对象,用于操作文件和目录。通过
    File
    对象,我们可以将文件和目录封装成对象。构造
    File
    对象时,需要提供文件或目录的路径名,常用的构造方法如下:
方法 描述
File(String pathName) 通过给定的路径名字符串创建新实例
File(String parent, String child) 从父路径名字符串和子路径名字符串创建新实例
File(File parent, String child) 从父抽象路径名和子路径名字符串创建新实例

死磕 IO 流?你都磕对地方了么

在创建

File
对象时,可以使用绝对路径或相对路径。相对路径是以当前文件所在位置为参考点,常用的符号有
.
(当前目录)和
..
(上一级目录)。例如,如果当前目录是
/home/cunyu1943/data
,那么
.
表示该目录,而
..
表示
/home/cunyu1943
目录。绝对路径可以分为本地绝对路径和网络绝对路径。本地绝对路径是以根目录为参考,例如 Windows 系统中的
D:\Softwares\Typora\Typora.exe
或 Unix 系统中的
/home/cunyu1943/IO.md
。为了在不同系统间兼容,建议使用
/
作为路径分隔符。网络绝对路径则包含网址,如
https://cunyu1943.site/index.html
。

死磕 IO 流?你都磕对地方了么

有了

File
对象后,我们可以进行文件和目录的创建与删除操作。以下是
File
类中常用的创建和删除方法:

返回值 方法 描述
boolean createNewFile() 当文件不存在时创建新空文件;存在时创建失败
boolean mkdir() 创建指定名称的目录
boolean mkdirs() 创建多级目录,包括所有必要但不存在的父目录
boolean delete() 删除指定的文件或目录(目录需为空才能删除)

死磕 IO 流?你都磕对地方了么

在创建文件时,使用

createNewFile()
方法,而创建目录时使用
mkdir()
或
mkdirs()
方法。注意区分这些方法的使用,否则可能导致错误,例如将文件路径当成目录路径处理。删除目录时,如果目录非空,则需要先删除目录中的内容,然后才能删除目录。

通过

File
对象,我们还可以获取文件的相关属性,常用方法如下:

返回值 方法 描述
long length() 返回文件的字节大小
boolean canRead() 检查文件是否可读
boolean canWrite() 检查文件是否可写
boolean canExecute() 检查文件是否可执行

死磕 IO 流?你都磕对地方了么

File
对象既可以表示文件,也可以表示目录。以下是用于判断和获取文件及目录信息的常用方法:

返回值 方法 描述
boolean isFile() 检查是否为普通文件
boolean isDirectory() 检查是否为目录
boolean exists() 检查文件或目录是否存在
String getPath() 返回路径字符串
String getAbsolutePath() 返回绝对路径名字符串
String getName() 返回文件或目录的名称
String[] list() 返回目录下的文件和目录名列表
File[] listFiles() 返回目录下的文件和目录对象列表

死磕 IO 流?你都磕对地方了么

假设我们需要遍历 Windows 系统中 C 盘的 Windows 目录,并列出其中的文件名和文件大小,而不列出目录名,可以使用以下代码:

死磕 IO 流?你都磕对地方了么

流是数据的组合,用于数据交互。Java 中,数据的输入和输出都是通过流来实现的。根据数据流的方向,流可以分为输入流和输出流;根据处理的数据单位,流可以分为字节流和字符流。两者的关系如下表所示:

字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer

选择字节流还是字符流的原则是:如果数据可以通过 Windows 自带的记事本软件打开并读取内容,则使用字符流,否则使用字节流。如果不确定,默认选择字节流。

死磕 IO 流?你都磕对地方了么

JavaStoryDevelop
JavaStoryDevelop

你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在

下载

InputStream
是所有字节输入流的父类。我们以
FileInputStream
为例,它用于从文件中读取数据到内存中。常用方法如下:

返回值 方法 描述
int available() 返回可读取的字节数估计值
void close() 关闭输入流并释放相关资源
int read(byte[] b) 从输入流读取一些字节并存储到缓冲区 b

死磕 IO 流?你都磕对地方了么

OutputStream
是所有输出字节流的父类。我们以
FileOutputStream
为例,它用于将数据从内存写入到文件中。常用方法如下:

返回值 方法 描述
void write(byte[] b) 将 b.length 个字节写入文件输出流
void close() 关闭文件输出流并释放相关资源

死磕 IO 流?你都磕对地方了么

在使用字节流写入数据时,实现换行可以通过写入换行符的字节数组实现。不同系统的换行符不同:Windows 使用

,macOS 使用 
,Linux 使用 
。实现追加写入可以通过 
FileOutputStream
的构造方法
public FileOutputStream(String name, boolean append)
来实现,当
append
为
true
时,表示追加写入。

死磕 IO 流?你都磕对地方了么

字符串的编码和解码方法如下:

  • 编码:

    • byte[] getBytes()
      :使用平台默认字符集将字符串编码为字节数组。
    • byte[] getBytes(String charsetName)
      :使用指定字符集将字符串编码为字节数组。
  • 解码:

    • String(byte[] bytes)
      :使用平台默认字符集解码字节数组为字符串。
    • String(byte[] bytes, String charsetName)
      :使用指定字符集解码字节数组为字符串。

死磕 IO 流?你都磕对地方了么

Writer
用于将基于字符的数据写入数据源。我们以
FileWriter
为例,其常用方法如下:

返回值 方法 描述
void close() 先刷新再关闭流,不能再写数据
void flush() 刷新流,可以继续写数据
void newLine() 写入行分隔符
void write() 写入字符或字符串

死磕 IO 流?你都磕对地方了么

Reader
用于从数据源读取基于字符的数据。我们以
FileReader
为例,其常用方法如下:

返回值 方法 描述
void close() 关闭流并释放相关资源
int read() 读取一个字符
String readLine() 读一行文字
boolean ready() 检查流是否准备好被读取

死磕 IO 流?你都磕对地方了么

关于 IO 流的知识点到此结束,希望大家能够掌握并应用这些内容。如果本文对你有帮助,请点赞关注。如果有任何遗漏或错误,欢迎在评论区留言讨论!

热门AI工具

更多
咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6299

2023.08.02

java中boolean的用法
java中boolean的用法

在Java中,boolean是一种基本数据类型,它只有两个可能的值:true和false。boolean类型经常用于条件测试,比如进行比较或者检查某个条件是否满足。想了解更多java中boolean的相关内容,可以阅读本专题下面的文章。

2130

2023.11.13

java boolean类型
java boolean类型

本专题整合了java中boolean类型相关教程,阅读专题下面的文章了解更多详细内容。

143

2025.11.30

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1738

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2664

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6064

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

5629

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

7294

2024.03.22

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

60

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++教程
C++教程

共115课时 | 43.1万人学习

手把手实现数据传输编码
手把手实现数据传输编码

共1课时 | 927人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 1.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn