当前位置:

首页 > 软件教程 > 死磕 IO 流?你磕对了吗

死磕 IO 流?你磕对了吗

在日常开发中,我们经常会接触到IO流,例如在处理文件上传下载、数据传输以及设计模式等方面。IO流是这些操作的基础,因此今天我们将深入探讨Java中IO流的相关知识点。本文将涵盖以下主要内容:文件对象流概述字节流与字符流文件对象与文件路径Java标准库java.io提供了File对象,用于操作文件和目录。通过File对象,我们可以将文件和目录封装成对象。构造File对象时,需要提供文件或目录的路径名,常用的构造方法如下:方法描述File(StringpathName)通过给

本文目录

    在日常开发中,我们经常会接触到 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 类中常用的创建和删除方法:

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

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

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

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

    返回值方法描述
    longlength()返回文件的字节大小
    booleancanRead()检查文件是否可读
    booleancanWrite()检查文件是否可写
    booleancanExecute()检查文件是否可执行

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

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

    返回值方法描述
    booleanisFile()检查是否为普通文件
    booleanisDirectory()检查是否为目录
    booleanexists()检查文件或目录是否存在
    StringgetPath()返回路径字符串
    StringgetAbsolutePath()返回绝对路径名字符串
    StringgetName()返回文件或目录的名称
    String[]list()返回目录下的文件和目录名列表
    File[]listFiles()返回目录下的文件和目录对象列表

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

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

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

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

    字节流字符流
    输入流InputStreamReader
    输出流OutputStreamWriter

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

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

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

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

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

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

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

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

    在使用字节流写入数据时,实现换行可以通过写入换行符的字节数组实现。不同系统的换行符不同:Windows 使用 \r\n,macOS 使用 \r,Linux 使用 \n。实现追加写入可以通过 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 为例,其常用方法如下:

    返回值方法描述
    voidclose()先刷新再关闭流,不能再写数据
    voidflush()刷新流,可以继续写数据
    voidnewLine()写入行分隔符
    voidwrite()写入字符或字符串

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

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

    返回值方法描述
    voidclose()关闭流并释放相关资源
    intread()读取一个字符
    StringreadLine()读一行文字
    booleanready()检查流是否准备好被读取

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

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

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    软件教程
    相关文章 更多
    .NET 获取图片宽高方法及性能对比
    .NET 获取图片宽高方法及性能对比

    在.NET框架中获取图片宽高有多种方法,本文将详细介绍四种方法,并对其性能进行评估。如果您需要处理大量图片,这些信息将非常有用。本文将评估以下四种方法来获取图片的宽高:System.Drawing.Imaging.Metafile不要误以为Metafile是图片的元数据,它实际上是微软Windows系统的一种图片格式,如WMF和EMF(WindowsMetafile和EnhancedMetafile)。虽然它可以读取其他格式的图片,但不适合通过读取元数据头来提升性能。varheader=Meta

    VS Code基础操作教程详解
    VS Code基础操作教程详解

    如何彻底卸载VSCode并清除所有用户数据?要实现此目的,您需要删除与VSCode相关的用户数据文件夹Code和.vscode。这样可以使您的系统恢复到安装VSCode之前的状态。如果您不打算卸载VSCode,也可以通过删除这些文件夹来重置所有设置。不同操作系统下的文件夹路径如下:Windows:删除%APPDATA%\Code和%USERPROFILE%\.vscode。macOS:删除$HOME/Library/ApplicationSupport/Code和~/.vscode。Linux:

    PCIe中断驱动寄存器被覆盖问题排查与修复
    PCIe中断驱动寄存器被覆盖问题排查与修复

    在Windows环境下使用WDF框架开发PCIe驱动的DMA读写功能时,启动一次DMA传输需要两个步骤:初始化DMA传输对象:在初始化DMA传输对象时,应将本次DMA传输的数据缓冲区的地址和长度写入该对象,并向其注册用于配置并启动DMA传输的回调函数PCIeEvtProgramWriteDma。该回调函数会获取缓冲区地址和长度,通过PIO方式配置PCIeBar空间上的寄存器,以通知硬件启动DMA传输。执行DMA传输:在执行DMA传输时,驱动仅需调用WDF框架的WdfDmaTransactionExecu

    Pytest跳过用例技巧:skip与skipif详解
    Pytest跳过用例技巧:skip与skipif详解

    如果你还想从头学起Pytest,可以看看这个系列的文章哦!https://www.cnblogs.com/poloyy/category/1690628.html前言可以标记无法在某些平台上运行的测试功能,戒者您希望失败的测试功能pytest.mark.skip希望满足某些条件才执行某些测试用例,否则pytest会跳过运行该测试用例实际常见场景:跳过非Windows平台上的仅Windows测试,或者跳过依赖于当前不可用的外部资源(例如数据库)的测试@pytest.mark.skip跳过执行测试用例,有

    Qt数据看板布局另存方法详解
    Qt数据看板布局另存方法详解

    一、前言布局另存功能是数据可视化大屏界面电子看板系统中的一项便捷功能,旨在帮助用户在现有布局上进行微调后,直接将其保存为新的配置文件,从而避免从头开始重新构建布局的繁琐过程。此功能依赖于配置文件的保存机制,通过将现有布局另存为不同名称的配置文件,用户可以轻松管理和切换不同的布局设置。在代码实现上,Qt的QSettings类提供了极大的便利,不仅支持Windows注册表的读写操作,还支持跨平台的INI文件格式。个人而言,我更倾向于使用INI文件作为配置文件,因为其跨平台特性特别适合我在嵌入式Linux环境下

    Qt输入法V2019项目作品分享
    Qt输入法V2019项目作品分享

    一、功能特点本输入法未采用Qt系统层输入法框架,而是采用了独创的输入切换机制。完全基于QWidget编写,适用于任何目标平台(已测试Windows、Linux、嵌入式Linux等),兼容任意Qt版本(已测试从Qt4.6.0到Qt5.13),支持任意编译器(已测试mingw、gcc、msvc等),并能在任意控件中输入,包括网页中的输入控件。调用非常方便,只需在pro文件中包含pri文件,例如:include($$PWD/input2019/input2019.pri)。界面设计简洁明了,UI美观友好,模仿I

    MySQL解压版Windows安装教程
    MySQL解压版Windows安装教程

    MySQL解压版如何在Windows系统中安装1、请将压缩包中的软件包解压出来,并复制到所要安装的路径下面。2、在安装路径下面软件包内新建两个文件,data目录和my.ini文件。3、在my.ini内更改安装位置,注意版本,文件已放置于压缩包中。代码语言:javascript代码运行次数:0运行复制[client]port=3306default-character-set=utf8[mysqld]#设置mysql的安装目录basedir=E:\MySQL\mysql-5.7.26-winx64#设置

    报错:缺少 Microsoft.ReportViewer.Common 11.0.0.0 解决方法
    报错:缺少 Microsoft.ReportViewer.Common 11.0.0.0 解决方法

    在开发WinForm客户端软件时,使用rdlc进行报表生成并通过ReportViewer展示报表时,开发者的机器上运行正常,但部署到第三方机器上时可能会遇到以下几种错误:(1)未能加载文件或程序集“Microsoft.ReportViewer.Common,Version=11.0.0.0,Culture=neutral,PublicKeyToken=89845dcd8080cc91”或它的某一个依赖项。系统找不到指定的文件。文件名:“Microsoft.ReportViewer.Common,V

    NTLM协议工作原理详解
    NTLM协议工作原理详解

    NTLM协议在WindowsNT和Windows2000Server(或更高版本)的工作组环境中使用(Kerberos用于域模式下)。在AD域环境中,若需要验证WindowsNT系统,必须使用NTLM。与Kerberos相比,NTLM认证过程更为简单。NTLM采用挑战/响应(Challenge/Response)消息交换模式,以下是NTLM的认证流程:NTLM认证协议可用于多种协议中,例如HTTP、SMB等。以下通过HTTP协议来说明其具体认证流程:首先,

    Windows 8配置Eclipse与Hadoop2.2.0环境指南
    Windows 8配置Eclipse与Hadoop2.2.0环境指南

    图文详解如何在Windows8.0上的Eclipse4.4.0中配置CentOS6.5上的Hadoop2.2.0开发环境,供有需要的朋友参考学习。Eclipse的Hadoop插件下载地址:https://github.com/winghc/hadoop2x-eclipse-plugin下载压缩包后,解压并将hadoop-eclipse-kepler-plugin-2.2.0.jar文件放置到Eclipse的dropins目录中,重启Eclipse即可。进入Windows->Prefere

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。