认识文件操作与IO

文章目录

  • 认识文件
    • 文件夹
    • 文件路径
    • 文件分类
  • 文件操作
    • File类
      • 构造方法
      • 常用方法
  • 字节流IO
    • InputStream
      • 常用方法
    • FileInputStream
      • 构造方法
      • FileInputStream实例
    • OutputStream
      • 方法
    • FileOutputStream
  • 字符流IO

认识文件

我们平时所说的文件指的是存在硬盘上的文件,我们平时的重要数据内容都以文件的方式来存储,我们平时书写的Java代码实际上是操作内存的一种方式,通过在内存上申请空间去执行操作。
我们接下来学习通过对文件以及IO接口的操作来实现对硬盘的操作,他能更直接的操作我们平时用到的数据文件,无论在我们的工作还是在我们的学习中,这都是不可或缺的。

文件夹

我们通俗的将目录文件称为文件夹,文件如同数据一般,我们计算机也通过管理数据的方式来管理文件
在这里插入图片描述
可以看到,计算机是通过树状结构来管理文件目录

文件路径

我们所说的路径就是找到文件途经的目录组成的,根据树状结构,我们知道找到一个文件就是从根开始,一路沿着树杈走下去所经过的目录,Windows系统都是通过此电脑起手的,所以我们通常省略此电脑

  • 绝对路径:指的是一个具体的路径,以盘符开头的。比如:C:\Program Files\Java\text
  • 相对路径:指的是从给定目录出发寻找文件(.开头)。比如:.\text
    注:Windows上文件与路径一一对应

文件分类

文件通常被分为文本文件二进制文件

  • 文本文件:存储的是字符
  • 二进制文件:存储二进制数据
    我们可以通过记事本1打开,出现乱码则是二进制文件

文件操作

主要指通过文件资源管理器能够完成的一些功能,在Java中提供了File类,通过这个类来完成一系列操作,下面我们进入正题。

File类

File类存在java.io包中

构造方法

File(String pathname)            //根据文件路径创建一个新的File 实例

注:此处的文件可以不存在,只要目录可以找到,调用createNewFile()就可以创建该文件

常用方法

修饰符及返回值类型方法签名说明
StringgetParent()返回 File
StringgetName()返回 FIle 对象的纯文件名称
StringgetPath()返回 File 对象的文件路径
StringgetAbsolutePath()返回 File 对象的绝对路径
StringgetCanonicalPath()返回 File 对象的修饰过的绝对路径
booleanexists()判断 File 对象描述的文件是否真实存在
booleanisDirectory()判断 File 对象代表的文件是否是一个目录
booleanisFile()判断 File 对象代表的文件是否是一个普通文件
booleancreateNewFile()根据 File 对象,自动创建一个空文件。成功创建后返回 true
booleandelete()根据 File 对象,删除该文件。成功删除后返回 true
voiddeleteOnExit()根据 File 对象,标注文件将被删除,删除动作会到JVM 运行结束时才会进行
String[]list()返回 File 对象代表的目录下的所有文件名
File[]listFiles()返回 File 对象代表的目录下的所有文件,以 File 对象表示
booleanmkdir()创建 File 对象代表的目录
booleanmkdirs()创建 File 对象代表的目录,如果必要,会创建中间目录
booleanrenameTo(Filedest)进行文件改名,也可以视为我们平时的剪切、粘贴操作
booleancanRead()判断用户是否对文件有可读权限
booleancanWrite()判断用户是否对文件有可写权限

以上操作都较为简单,只需注意在IDEA的工作目录是当前项目所在的目录.\代表当前工作目录(基准目录). .\代表当前工作目录的父目录

字节流IO

每种流对象都分为两种,输入与输出,输入是指将硬盘数据送到CPU,输出是指将数据从CPU送到硬盘,也就是说我们讨论的输入输出是以CPU为基准的

InputStream

关于InputStream类,Java中实现的方法是抽象类,因此我们不能够直接实例化,而是通常使用实现了这个抽象类的类,就目前阶段,我们不涉及到网络等等内容,只关心从文件中读取,所以使用FileInputStream

常用方法

修饰符及返回值类型方法签名说明
intread()读取一个字节的数据,返回 -1 代表已经完全读完了
intread(byte[] b)最多读取 b.length 字节的数据到 b 中,返回实际读到的数量;-1 代表以及读完了
intread(byte[] b,int off, int len)最多读取 len - off 字节的数据到 b 中,放在从 off 开始,返回实际读到的数量;-1 代表以及读完了
voidclose()关闭字节流

:关闭操作是非常必要的,不同于Java之前的习惯,文件这里的资源需要手动释放!!!

FileInputStream

构造方法

签名说明
FileInputStream(File file)利用 File 构造文件输入流
FileInputStream(String name)利用文件路径构造文件输入流

FileInputStream实例

InputStream inputStream = new FileInputStream("D:/J-student-s:/JE-student-23-7-9");

一种优秀的书写习惯(try with resources):

try(InputStream inputStream = new FileInputStream("D:/J-student-s:/JE-student-23-7-9")){
//这种写法可以自动释放资源}

前面InputStream中提供了三种read版本,返回值-1代表读取结束,我们写如下读文件操作:

import java.io.*;public class Text1 {public static void main(String[] args) throws IOException {try(InputStream inputStream = new FileInputStream("D:\\student-Java-s\\JE-student-23-7-9\\text.txt");){while(true){int b = inputStream.read();if (b==-1){break;}System.out.print(b);System.out.printf("%c\n",b);}}}
}

运行结果如下:
在这里插入图片描述

OutputStream

方法

修饰符及返回值类型方法签名说明
voidwrite(int b)写入要给字节的数据
voidwrite(byte[] b)将 b 这个字符数组中的数据全部写入 os 中
intwrite(byte[] b, int off, int len)将 b 这个字符数组中从 off 开始的数据写入 os 中,一共写 len 个
voidclose()关闭字节流
voidflush()我们知道 I/O 的速度是很慢的,所以,大多的 OutputStream 为了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的一个指定区域里,直到该区域满了或者其他指定条件时才真正将数据写入设备中,这个区域一般称为缓冲区。但造成一个结果,就是我们写的数据,很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置,调用 flush(刷新)操作,将数据刷到设备中。

注:同样的,我们使用FileOutputStream来写入文件

FileOutputStream

这里不过多叙述,具体构造方法以及使用与FileInputStream相同

字符流IO

主要使用抽象类reader、writer,实例类FileReader、FileWriter,用read、writer来写与读,与字节流完全一样,仅有的区别是字符流IO一次读一个字符,字节流一次读一个字节,这里就不再啰嗦了~

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

webpack5搭建与基本概念

webpack基础构建 新建文件夹进入文件夹查看是否安装node,命令:node-v创建package.json文件,命令:npm init -y安装webpack和webpack-cli,(命令自动创建出package-lock.json文件和node_modules文件夹&#x…

天猫数据分析工具(天猫实时数据)

后疫情时代,聚会、聚餐与送礼热度上涨,酒类产品既作为送礼首选又作为佐餐饮品的热门选手也受此影响迎来消费小高峰。在此背景下,白酒市场也开始复苏并不断加快速度。 根据鲸参谋电商数据分析平台的相关数据显示,2023年1月份至4月…

AI Chat 设计模式:5. 策略模式

本文是该系列的第五篇,采用问答式的方式展开,问题由我提出,答案由 Chat AI 作出,灰色背景的文字则主要是我的旁白。 问题列表 Q.1 我想学习一下策略模式A.1Q.2 你先给我简单讲解一下吧A.2Q.3 你举得这个电商平台例子不错&#xf…

RabbitMQ的可视化管理页面简介

模块 描述 Overview 概览 Connections 查看连接情况 Channels 信道(通过)情况 Exchanges 交换机(路由)情况,默认四类七个 Queues 消息队列情况 Admin …

TLS、SSL、CA 证书、公钥、私钥

1. HTTP 的问题 HTTP 协议是超文本传输协议(Hyper Text Transfer Protocol)的缩写,它是从 WEB 服务器传输超文本标记语言 HTML 到本地浏览器的传送协议。HTTP 设计之初是为了提供一种发布和接收 HTML 页面的方法,时至今日&#x…

javaWeb中的Ajax_待后期增加

前言: Ajax是一种在JavaWeb开发中常用的技术,通过它可以实现异步通信和动态加载数据,提升用户体验。 正文: 首先我们得明白异步通信,客户端发出请求后可以继续执行其他操作 由于原生的Ajax过于复杂 so: …

DFS解决N-皇后问题

题目: n−皇后问题是指将 n个皇后放在 nn的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n,请你输出所有的满足条件的棋子摆法。 输入格式 共一行,包…

论文学习——U-Net: Convolutional Networks for Biomedical Image Segmentation

UNet的特点 采用端到端的结构,通过FCN(最后一层仍然是通过卷积完成),最后输出图像。通过编码(下采样)-解码(上采样)形成一个“U”型结构。每次下采样时,先进行两次卷积&…

CygWin:windows上运行类linux命令

CygWin是一个在Windows平台上运行的类UNIX模拟环境,是Cygnus Solutions公司开发的自由软件。它提供了类似于Linux系统的终端环境和工具,使用户可以在Windows平台上运行Unix-like的程序,如Bash、awk、sed和grep等 。 下载setup.exe 安装Cygwin…

【Excel经验】日期时间处理方法

概览-公式汇总 公式功能公式公式说明提取时间中的日期TEXT(A2,“yyyy-mm-dd”)A2列数据格式样例:2023/7/5 6:20:10计算耗时得到单位:秒数VALUE(TEXT(B2-A2,“[ss]”))A2、B2列数据格式样例:2023/7/5 6:20:10计算耗时得到格式化显示年月日B2-…

ModaHub魔搭社区:向量数据库Milvus Lite 的优势和安装教程

想要体验开源向量数据库MIlvus,缺少专业的工程师团队作为支撑?Milvus 安装环境受限? 别担心,轻量版 Milvus 来啦! 有用户反馈刚开始接触 Milvus 或者想要在 Notebook 中进行快速实验时,安装或部署 Milvus 有些力不从心 。开发了 Milvus 的轻量级版本Milvus Lite ,方…

Vue3使用element-plus实现弹窗效果-demo

使用 <ShareDialog v-model"isShow" onChangeDialog"onChangeDialog" /> import ShareDialog from ./ShareDialog.vue; const isShow ref(false); const onShowDialog (show) > {isShow.value show; }; const onChangeDialog (val) > {co…