Java IO流(基础详解,快速上手!)

news2024/9/27 23:27:03

文章目录

  • 概述
  • 什么是IO流?
  • 常用的文件操作
    • 获取文件操作
    • 目录操作
  • IO流的原理和分类

概述

在Java的学习中,文件和IO流是一个十分重要的板块。在Java中,File是文件和目录路径名的抽象表示。文件和目录可以通过File封装成对象。对File而言,其封装的并不是一个真正存在的文件,仅仅只是一个路径名而已,他可以是存在的也可以是不存在的。将来是要通过具体操作把这个路径的内容转化为具体存在的。


什么是IO流?

IO流也叫文件流。其实就是计算机调度把各个存储中(包括内存和外部存储)的数据写入写出的过程(通过IO可以完成硬盘文件的读和写)

  • I:input(输入)
  • O:Output(输出)

文件在程序中是以流的形式操作的(文件是保存数据的地方)

在这里插入图片描述

  • 输入流:数据从数据源(文件)到程序(内存)的路径
  • 输出流:数据从程序(内存)到数据源(文件)的路径

常用的文件操作

根据路径构建一个File对象

new File(String pathname);

根据 父目录文件 + 子路径 父目录文件+子路径 父目录文件+子路径 构建

new File(File parent, String child);

根据 父目录 + 子路径 父目录+子路径 父目录+子路径 构建

new File(String parent, String child);

createNewFile方法 创建新文件
将内存的File写入到硬盘中,如果命名文件不存在且已成功创建,则此方法返回 true。 如果文件存在,该方法返回 false。

官方文档(采用JD8版本)

  • 中文
    在这里插入图片描述

  • English
    在这里插入图片描述

File实现了Serializable(串行化)和Comparable(比较)两个接口
一个类实现了 Comparable 接口,意味着该类的对象可以直接进行比较

演示

  • 方式1 new File(String pathname);
import java.io.File;
import java.io.IOException;

@Test
public void create01(){
    String filePath = "E:\\text.txt";
    File file = new File(filePath);
    try {
        file.createNewFile();
    } catch (IOException e) {
        e.getMessage();
    }
    System.out.println("文件创建成功");
}

此时E盘下会出现text文件

  • 方式2 new File(File parent, String child); 父目录文件+子路径
@Test
public void create02(){
    File parentfile = new File("E:\\");
    String fileName = "text2.txt";
    File file = new File(parentfile, fileName);
    try {
        file.createNewFile();
    } catch (IOException e) {
        e.getMessage();
    }
}

此时E盘下会出现text2文件

  • 方式3 new File(String parent, String child); 父目录+子路径
@Test
public void create03(){
    String parentPath = "E:\\";
    String filePath = "text3.txt";
    File file = new File(parentPath, filePath);
    try {
        file.createNewFile();
    } catch (IOException e) {
        e.getMessage();
    }
}

此时E盘下会出现text3文件

注意:路径也可也用 / 这个,只不过用 \ 的时候需要在加上一个(转义字符)

获取文件操作

基本的常用方法(并不是全部)

  • getName 获取文件的名字
  • getAbsolutePath 获取文件的绝对路径
  • getParent 获取文件的父级目录
  • length 获取文件的大小
  • exists 文件是否存在
  • ifFile 是否是一个文件(File)
  • isDirectory 文件是否是目录

更多方法可在JDK文档或百度进行查看

演示

@Test
public void info(){
    //先创建文件对象
    File file = new File("E:\\text1.txt");
    //调用相应的方法
    System.out.println("文件名字:"+file.getName());
    System.out.println("文件绝对路径:"+file.getAbsolutePath());
    System.out.println("文件父级目录:"+file.getParent());
    System.out.println("文件大小(字节):"+file.length());
    System.out.println("文件是否存在:"+file.exists());
    System.out.println("是否存在:"+file.isFile());
    System.out.println("文件是否为目录:"+file.isDirectory());
}

输出

文件名字:text1.txt
文件绝对路径:E:\text1.txt
文件父级目录:E:
文件大小(字节):11
文件是否存在:true
是否存在:true
文件是否为目录:false

目录操作

  • mkdir 创建一级目录
  • mkdirs 创建多级目录
  • delete 删除空目录或文件

删除文件(目录),返回的是一个布尔值,成功为true,失败为false

import java.io.File
import org.junit.jupiter.api.Test;

@Test
public void m1(){
    String filePath = "E:\\text1.txt";
    //String filePath = "E:\\text";//删除text目录同理
    File file = new File(filePath);
    file.delete();
}

E盘下的text.txt文件被删除

创建一级目录(mkdir)

@Test
public void m2(){
    String filePath = "E:\\text";
    File file = new File(filePath);
    file.mkdir();
}

此时E盘会出现text目录

创建多级目录(mkdirs)

@Test
public void m2(){
    String filePath = "E:\\text\\text2\\text3";
    File file = new File(filePath);
    file.mkdirs();
}

IO流的原理和分类

  • I/O是Input/Output的缩写,I/O技术是非常实用的技术,用于处理数据传输(如读/写文件,网络通信等)
  • Java程序中,对于数据的输入 / 输出操作以 “流(stream)” 的方式进行
  • Java.io 包下提供了各种 “流” 类和接口,用以获取不同种类的数据,并通过方法输入或输出数据
  1. 输入input:读取外部数据(磁盘、光盘、数据库、网络等存储设备的数据)到程序(内存)中
  2. 输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中

在这里插入图片描述
分类

  1. 按操作数据单位不同分为:字节流(8bit)二进制文件,字符流(按字符,一个字符对于多少个字节和编码有关)文本文件
  2. 按数据流的流向不同分为:输入流、输出流
    • 字节流主要是由InputStream和outPutStream作为基类,而字符流则主要有Reader和Writer作为基类。
  3. 按流的角色的不同分为:节点流、处理流/包装流
    • 可以从/向一个特定的IO设备(如磁盘,网络)读/写数据的流,称为节点流。
    • 处理流则用于对一个已存在的流进行连接和封装,通过封装后的流来实现数据的读/写功能。

在这里插入图片描述

  • InputStream
  • OutputStream
  • Reader
  • Writer

以上四个均为抽象类(abstract),在使用的时候要去创建它们的实现子类!

在Java的IO流共涉及40多个类,实际上非常规则,都是从以上四个抽象基类派生的
由这四个类派生出来的子类名称都是以其父类名作为子类的后缀名
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/150751.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端 base64与图片相互转换

base64转图片 如下图&#xff1a;&#xff08;后端返回的数据&#xff09; <img :src"baseImg" >let baseImg "" this.baseImg "data:image/png;base64," data?.flowCharbase64转换图片文件 base64ImgtoFile (dataurl, filename …

QT 学习笔记(十六)

文章目录一、TCP 传文件流程图1. 服务器端流程2. 客户端流程二、TCP 传文件操作实现1. 服务器端2. 客户端3. TCP 传文件实现现象三、服务器端和客户端实现代码1. 主函数 main.c2. 服务器端头文件 serverwidget.h3. 服务器端源文件 serverwidget.cpp4. 客户端头文件 clientwidge…

某医院的实战渗透测试(组合拳)

实战渗透一、前言二、Spring信息泄露三、Redis写公钥四、文章来源一、前言 项目是内网环境下进行&#xff0c;所以通过vpn接入内网之后进行目标系统的测试。&#xff08;信息泄露redis写公钥&#xff09; 二、Spring信息泄露 访问客户给的目标地址通过代理把流量转给了BurpS…

零基础学软件测试有前途吗?

随着软件工程活动的不断演化&#xff0c;测试工作某种程度上是可以很大幅度提高软件的产品质量以及提升用户的使用满意度&#xff0c;因此软件测试工程师的地位在企业中也越来越受到重视。不少零基础学IT的朋友也开始把软件测试作为一个绝佳的选择对象&#xff0c;那么零基础学…

leetcode.1806 还原排列的最少操作步数 - 模拟 + lcm

​​​​​​1806. 还原排列的最少操作步数 本题是数论题 共介绍4种解题方法 目录 1、所有置换环长度的最小公倍数 2、最小操作数是最大环长度 3、1或n-2所在环长度即为最大置换环长度 4、暴力模拟 思路&#xff1a; 因为数据范围很小 所以可以直接模拟 也可以优化一下—…

Python 模型训练:LSTM 时间序列销售额预测(训练、保存、调用)

LSTM (long short-term memory) 长短期记忆网络&#xff0c;具体理论的就不一一叙述&#xff0c;直接开始 流程一、数据导入二、数据归一化三、划分训练集、测试集四、划分标签和属性五、转换成 LSTM 输入格式六、设计 LSTM 模型6.1 直接建模6.2 找最好七、测试与图形化展示八、…

JavaSE-07

字节流输入输出数据&#xff1a; InputStream和OutputStream作为字节流输入输出流的超类。 字节流写数据时千万记得close关闭资源&#xff0c;可设置追加写为true 字节流读数据时&#xff0c;FileInputStream a new FileInputStream (“”); int by a.read(); char b (char…

隐蔽信道学习

隐蔽信道作为一种能够在不被系统感知的情况下稳定窃取秘密信息的通信手段&#xff0c;尽管其带宽通常较低&#xff0c;但其设计上的复杂性和多样性&#xff0c;使得常规的流量审计系统难以对抗或检测。同时&#xff0c;隐蔽信道也是密钥、身份认证、商业机密等秘密信息传输的重…

基于JAVA SSM框架的新闻管理系统源码+数据库,实现 登录 、 注册、 新闻内容、类别、评论、个人信息、系统管理等功能

[基于SSM框架的新闻管理系统] 前言 下载地址&#xff1a;基于JAVA SSM框架的新闻管理系统源码数据库 基于SSM框架的新闻管理系统&#xff1b; 实现 登录 、 注册 、 新闻内容、类别、评论、个人信息、系统管理等功能 &#xff1b; 可继续完善增加前端、等其他功能等&#x…

federated引擎实现mysql跨服务器表连接

&#x1f4e2;作者&#xff1a; 小小明-代码实体 &#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/as604049322 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 欢迎讨论&#xff01; &#x1f4e2;本文链接&#xff1a;https://xxmdmst.blog.csdn.n…

IU5066 高耐压带OVP保护1.2A单节锂电池线性充电IC

概要 IU5066E是面向空间受限便携应用的&#xff0c;高度集成锤离子和锤聚合物线性充电器器件。该器件由USB端口或交流适配器供电。带输入过压保护的高输入电压范围支持低成本、非稳压适配器。 电池充电经历以下三个阶段&#xff1a; 涓流、电流、恒压。在所有充电阶段&#x…

JSON对象(javascript)

本文内容主要包括了对于JS中JSON对象的一些内容。我们知道JSON格式是前后端进行信息交换的中介信息格式。适用于取代XML格式的一种格式&#xff0c;在多数编程语言中都有关于JSON的处理方法。那么javascript也提供了JSON对象用于处理相应的数据。 1. 什么是JSON格式&#xff1…

mac安装jdkidea配置jdk

第一步&#xff1a;mac安装jdk1、下载jdk&#xff0c;下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#java82、安装后&#xff0c;终端输入java -version查看java是否安装成功3、配置环境变量a.在终端输入 /usr/libexec/java_home 可以得到JAVA_HOM…

【矩阵论】5. 线性空间与线性变换——线性映射与自然基分解,线性变换

矩阵论 1. 准备知识——复数域上矩阵,Hermite变换) 1.准备知识——复数域上的内积域正交阵 1.准备知识——Hermite阵&#xff0c;二次型&#xff0c;矩阵合同&#xff0c;正定阵&#xff0c;幂0阵&#xff0c;幂等阵&#xff0c;矩阵的秩 2. 矩阵分解——SVD准备知识——奇异值…

深度学习人体解析

人体解析旨在将图像或视频中的人体分割成多个像素级的语义部分。在过去的十年中&#xff0c;它在计算机视觉社区中获得了极大的兴趣&#xff0c;并在广泛的实际应用中得到了应用&#xff0c;从安全监控到社交媒体&#xff0c;再到视觉特效&#xff0c;这只是其中的一小部分。尽…

Markdown语法大全(够你用一辈子)

标题 # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 文本样式 > 引用文本 > 最外层 > > 第一层嵌套 > > > 第二层嵌套引用文本 最外层 第一层嵌套 第二层…

js中的call和apply

js中的call和apply1.call()可以调用某一函数2.call()可以这个函数的this指向3.call()也可以接受参数每次看到js中的call方法&#xff0c;都是懵逼的要去查查百度&#xff0c;自己研究记录下1.call()可以调用某一函数 testCall() {let person {fullName: function () {console.…

webpack基本使用

1、内置模块path &#xff08;1&#xff09;path模块用于对路径和文件进行处理&#xff0c;提供了很多好用的方法。 &#xff08;2&#xff09;我们知道在Mac OS、Linux和window上的路径时不一样的 window上会使用 \或者 \\ 来作为文件路径的分隔符&#xff0c;当然目前也支…

SpringBoot+VUE前后端分离项目学习笔记 - 【17 SpringBoot文件上传下载功能 MD5实现文件唯一标识】

Sql 数据库新建sys_file用来保存上传文件信息 CREATE TABLE sys_file (id int(11) NOT NULL AUTO_INCREMENT COMMENT id,name varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 文件名称,type varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 文…

STM32——I2C通信

文章目录I2C通信使用I2C通信的硬件设备硬件电路I2C时序基本单元起始与终止发送接收发送应答与接收应答I2C时序指定地址写当前地址读指定地址读连续读与写MPU6050简介MPU6050参数硬件电路MPU6050框图系统时钟MPU6050的中断源寄存器映像软件I2C读写MPU6050电路设计关键代码I2C通信…