Java之IO

1. io的概述:

数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了。那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据读出来继续使用呢?其实要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘、光盘、U盘等)上。

  • 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。
  • 当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。

我们把这种输入和输出动作称为IO操作。

IO使用场景:

  • 上传头像
  • 发送附件
  • 微信传文件
  • ......

2. File与Stream的关系:

File(文件)在API中这样解释:File是文件和目录路径名的抽象表示。而我们实际上可以用File来操作盘符、文件、目录。

stream表示流

File和Stream之间就像水杯和水的关系,File就像水杯,Stream就像是水杯里面的水

  • 水杯是水的容器,水是水杯的内容。
  • 文件是流的容器,流是文件的内容。

3. 输入流和输出流:

输入流:Java程序得到了数据,就是输入流
输出流:Java程序对外提供了数据,就是输出流。


1658847732009.png

File

1. File的简介

File(文件)在API中这样解释:File是文件和目录路径名的抽象表示。而我们实际上可以用File来操作盘符、文件、目录。

2. File类的构造函数

构造函数 描述
File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。
File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。
File(URI uri) 通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。

3. File类的方法

创建完了File对象之后,那么File类中都有如下常用方法,可以获取文件相关信息

返回值 方法名 描述
boolean canExecute() 测试应用程序是否可以执行此抽象路径名表示的文件。
boolean canRead() 测试应用程序是否可以读取由此抽象路径名表示的文件。
boolean canWrite() 测试应用程序是否可以修改由此抽象路径名表示的文件。
boolean createNewFile() 当且仅当具有该名称的文件尚不存在时,原地创建一个由该抽象路径名命名的新的空文件。
boolean delete() 删除由此抽象路径名表示的文件或目录。
File getAbsoluteFile() 返回此抽象路径名的绝对形式。
String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
long getFreeSpace() 返回分区未分配的字节数 named此抽象路径名。
String getName() 返回由此抽象路径名表示的文件或目录的名称。
String getParent() 返回此抽象路径名的父 null的路径名字符串,如果此路径名未命名为父目录,则返回null。
File getParentFile() 返回此抽象路径名的父,或抽象路径名 null如果此路径名没有指定父目录。
String getPath() 将此抽象路径名转换为路径名字符串。
long getTotalSpace() 通过此抽象路径名返回分区 named的大小。
long getUsableSpace() 返回上的分区提供给该虚拟机的字节数 named此抽象路径名。
boolean isDirectory() 测试此抽象路径名表示的文件是否为目录。
boolean isFile() 测试此抽象路径名表示的文件是否为普通文件。
boolean isHidden() 测试此抽象路径名命名的文件是否为隐藏文件。
long lastModified() 返回此抽象路径名表示的文件上次修改的时间。
long length() 返回由此抽象路径名表示的文件的长度。
String[] list() 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
String[] list(FilenameFilter filter) 返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles() 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。
File[] listFiles(FileFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
File[] listFiles(FilenameFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
static File[] listRoots() 列出可用的文件系统根。
boolean mkdir() 创建由此抽象路径名命名的目录。
boolean mkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。
boolean renameTo(File dest) 重命名由此抽象路径名表示的文件。
boolean exists() 文件或目录是否存在

Stream

1. 流的分类

  • 输入流和输出流

    • 输入流的基类:InputStream

    • 输出流的基类:outputStream

  • 字节流和字符流

    • 字节流:类名包含了Stream

    • 字符流:类名包含了Reader或Writer

  • 转换流

    • 以字符流读取字节流 InputStreamReader

    • 以字符流写入字节流 OutputStreamWriter

  • 随机访问流:RandomAccessFile

  • 缓存流:利用缓冲区提升性能

    • BufferedInputStream

    • BufferedOutputStream

  • 对象流:序列化和反序列化

    • 序列化:ObjectOutputStream

    • 反序列化:ObjectInputStream

  • 数据流:数据流就是将指定的数据类型读取或写入

    • 读取:DataInputStream

    • 写入:DataOutputStream

2. 设计原则

83mKMpkiTBNDlQn.png

3. 流的操作流程

不管是输入流还是输出流,其操作过程都包括以下三个过程

第一步:打开流:通过File类或者网络或者其他打开流

第二步:操作流:读写流

第三步:关闭流:以释放和这个流相关的系统资源

Java IO模型

java中常见的三种IO模型:

BIO(Blocking I/O)同步阻塞


1658842791659.png

NIO(Non-blocking/new I/O)I/O多路复用


1658843146640.png

AIO(Asynchronous I/O)异步
1658843173144.png

commons-IO

  • Java IO操作是开发中比较常用的技术,但是如果每次都使用原生的IO流来操作会显得比较繁琐。
  • Common IO 是一个工具库,用来帮助开发IO功能, 它包括6个主要部分:
    • Utility classes – 工具类,包括一些静态方法来执行常用任务
    • Input – 输入,InputStream 和 Reader 实现
    • Output – 输出,OutputStream 和 Writer 实现
    • Filters – 过滤器,多种文件过滤器实现(定义了 IOFileFilter接口,同时继承了 FileFilter 和 FilenameFilter 接口)
    • Comparators – 比较器,用于文件比较的多种java.util.Comparatot实现
    • File Monitor–文件监控

commons-IO里的两个常用类

  • FilenameUtils
  • FileUtils
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容

  • IO流知识点梳理 文件流:从一端流动到另一端,即从java内存流动到存储介质中。存储介质包括:硬盘文件、数据库与网...
    小山居阅读 186评论 0 0
  • IO(Input Output)流的概述 下面给出IO流的基本概述,这样可以对IO流有一个宏观上的基本了解。 IO...
    北京大数据苏焕之阅读 239评论 0 0
  • 一、File类 1.File:文件和目录路径名的抽象表示,File类的实例不可以改变 2.构造方法: (1)Fil...
    啦啦啦_9a5f阅读 223评论 0 1
  • Java IO学习笔记一 File File是文件和目录路径名的抽象表示形式,总的来说就是java创建删除文件目录...
    爱撒谎的男孩阅读 256评论 0 0
  • File类: 表示文件和目录路径名的抽象表示形式。提供了一些列队文件的操作方法 一:分隔符 路径分隔符,在不同的系...
    Mr丶陈阅读 228评论 0 0