2021-08-05笔记

3.设备

设备概念:能输出或者输⼊数据的都可以成为设备

设备:磁盘(硬盘),内存,键盘,⽂件,⽹络,控制台

⽹络:当前主机之外的⽹上资源

4. IO流的分类

4.1 IO流的分类

按照不同的分类标准, 能够得到不同分类的IO流:

  • 按照传输数据的单位:

  • 字节流: 传输的是字节,是以字节为单位的。可以操作任意类型的数据 ------ ⾳频,视频,⽂件,图⽚等

  • 字符流: 传输的是字节,不同点是在传输过程中加⼊了编码的操作,让我们的操作更⽅便------⽂本

  • 按照数据传输的⽅向:

    以内存为参考

    • 输⼊流:数据从其他设备传到内存

    • 输出流:数据从内存传到其他设备

4.2基础的IO流类的简介

其实在 java.io 包中, 有很多很多的类, 都是来描述IO流的。 但是基本上所有的IO 流的类, 都是直接或间接的继承⾃四⼤⽗类流。

字节流的两个⽗类: (传输的是字节,是以字节为单位的。可以操作任意类型的数据---⾳频,视频,⽂件,图⽚等 )

  • 字节输⼊流:InputStream

  • 字节输出流:OutputStream

字符流的两个⽗类: (传输的是字节,不同点是在传输过程中加入了编码的操作,让我们的操作更方便---文本)

  • 字符读⼊流:Reader

  • 字符写出流:Writer

4.3 IO流使用的注意事项

  • 四⼤⽗类流,都是抽象类,都不能实例化对象。因此,需要借助他们的⼦类实 现数据的读写。

  • 流对象⼀旦实例化完成,将建⽴⼀个程序与⽂件之间的连接。这个连接会持有 这个⽂件。如果这个连接不断,此时这个⽂件就是⼀个被使⽤中的状态,此时将⽆法对这个⽂件进⾏其他的操作,例如删除。

  • ⼀个流在使⽤完成之后,切记!⼀定要进⾏流的关闭。

5.文件操作

5.1绝对路径和相对路径

5.1.1相关概念

路径: ⽤来描述⼀个⽂件所在的地址, ⽤来定位⼀个⽂件的。 可以分为绝对路径相对路径

绝对路径:从磁盘的根⽬录开始,⼀层层的向下查找,直到找到这个⽂件。

相对路径: 找到⼀个参照物,相对于这个参照物的路径。

5.1.2对比

优点缺点
绝对 路径⽤来表示⼀个⽂件的地址, 只要这个使 ⽤⽅还在当前磁盘上, ⼀定可以找到这 个⽂件。⼀旦更换⼀个⽂件系统, 此 时这个路径表示的⽂件将⽆ 法找到。
相 对 路 径只要两者的相对位置不变, ⽆论在哪⼀ 个⽂件系统中, 都可以找到这个⽂件。只要两者的相对位置发⽣了 改变, 这个⽂件就⽆法被访 问到。

5.2分隔符

5.2.1分隔符的简介

在描述路径的字符串中, 有两种分隔符, 是⽐较常⻅的: 目录分隔符路径分隔符

目录分隔符

分隔开⼀个路径中的不同的⽂件夹, ⽤来描述层级关系、 包含关系。

在不同的操作系统中, ⽬录分隔符是不⼀样的。 在windows中, 使⽤ \ 作为⽬录 分隔符; 在⾮windows的操作系统中, 例如: Linux、Unix.. 使⽤的是 / 作为⽬录分 隔符。

理论上来讲, 在windows中,应该使⽤\作为⽬录分隔符。 但是在有些情况 下,使⽤/也是可以做⽬录分隔符的

路径分隔符

分隔开⼀个字符串中的多个路径的。

在不同的操作系统中, 路径分隔符是不⼀样的。 在windows中, 使⽤ ; 作为路径 分隔符; 在⾮windows的操作系统中, 例如: Linux、Unix.. 使⽤的是 : 作为路径分 隔符。

5.2.2分隔符的表示

如果你的程序只需要考虑部署在windows平台,那么只需要按照windows的规范书 写就可以;如果你的程序只需要部署到 linux 上, 那么只需要按照 linux 的规范书写就 可以。但是,如果你的程序需要考虑在不同的平台上部署运⾏,此时就需要使⽤以 下⽅法进⾏分隔符的获取。

方法描述
File.separator();获取⼀个⽬录分隔符。 会根据不同的操作系统, 返回⼀个指定的⽬录分隔符字符串。
File.separatorChar();获取⼀个⽬录分隔符。 会根据不同的操作系统, 返回⼀个指定的⽬录分隔符字符。
File.pathSeparator();获取⼀个路径分隔符。 会根据不同的操作系统, 返回⼀个指定的路径分隔符字符串。
File.pathSeparatorChar();获取⼀个路径分隔符。 会根据不同的操作系统, 返回⼀个指定的路径分隔符字符。

5.3 File类

5.3.1 File类的简介

File是 java.io 包中的⼀个类。 是对磁盘上的某⼀个⽂件、⽂件夹(⽬录)的描述。 所谓的⽂件操作, 其实都是需要使⽤这个类来完成的。

5.3.2 File类的构造方法

参数描述
String pathname通过⼀个路径字符串, 描述⼀个指定路径下的⽂件。
String parent, String child将parent和child拼接到⼀起, 成⼀个新的路径。 ⽤来描述 这个拼接好的路径。
File parent, String child将parent所描述的路径与child拼接到⼀起, 成⼀个新的路 径。 ⽤来描述这个拼接好的路径。

5.3.3 File类常用方法

1)文件属性获取方法

返回值方法描述
booleanexists()判断⼀个⽂件(⽬录)是否存在
booleanisFile()判断⼀个路径指定的是否是⼀个⽂件。
booleanisDirectory()判断⼀个路径指定的是否是⼀个⽂件夹。
longlength()获取⼀个⽂件的⼤⼩(注: 只能获取⽂件的⼤⼩)。
booleanisHidden()判断⼀个⽂件(⽬录)是否是隐藏的。
booleancanRead()判断⼀个⽂件(⽬录)是否是可读的。
booleancanWrite()判断⼀个⽂件(⽬录)是否是可写的。
booleancanExecute()判断⼀个⽂件(⽬录)是否是可执⾏的。
StringgetName()获取⼀个⽂件(⽬录)的⽬录。
StringgetPath()获取⼀个⽂件(⽬录)的路径(相对路径)。
StringgetAbsolutePath()获取⼀个⽂件(⽬录)的路径(绝对路径)。
StringgetParent()获取⼀个⽂件(⽬录)的⽗级路径(字符串)。
FilegetParentFile()获取⼀个⽂件(⽬录)的⽗级(File类)。
longlastModified()获取⼀个⽂件(⽬录)上次修改的时间。

2)文件操作方法

返回值方法描述
booleancreateNewFile()在指定的路径下创建⼀个⽂件。
booleanmkdir()在指定的路径下创建⼀级⽂件夹。
booleanmkdirs()在指定的路径下创建多级⽂件夹。
booleandelete()删除⼀个⽂件,或者删除⼀个空的⽂件夹。
booleanrenameTo(File dst)将⼀个⽂件重命名为指定的⽂件, 也可以实现⽂件的移动

3)文件获取

返回值方法描述
String[]list()获取⼀个⽬录下所有的⼦⽂件(夹)的名字。
String[]list(FilenameFilter filter)获取⼀个⽬录下所有的满⾜条件的⼦⽂件 (夹)的名字。
File[]listFiles()获取⼀个⽬录下所有的⼦⽂件(夹)。
File[]listFiles(FileFilter filter)获取⼀个⽬录下所有的满⾜条件的⼦⽂件 (夹)。
File[]listFiles(FilenameFilter filter)获取⼀个⽬录下所有的满⾜条件的⼦⽂件 (夹)。

6.基础的IO流

6.1建立程序和文件的连接

其实, 就是建⽴了程序与⽂件之间连接的管道, 实现数据在这个管道之内进⾏流 动。 管道分为不同的类型:字节输⼊流、字节输出流、字符输⼊流、字符输出流。下⾯以字节输⼊流 InputStream 为例。

6.1.1标准流程

  • try结构外⾯,声明流对象,为了在finally中使⽤。

  • 在try结构⾥⾯,实例化流对象,并捕获异常。

  • 在finally结构中,对流进⾏关闭。在关闭的时候,需要考虑流对象是否是null,以及要处理 IOException异常。

6.1.2 try结构的特殊使用

在 JDK1.7 之后,可以在try后⾯添加⼀对⼩括号。将 AutoClosable 接⼝实现类的对 象,实例化放到⼩括号中完成。·此时,在try结构执⾏结束的时候,会⾃动的调⽤ AutoClosable接⼝实现类中的close⽅法,进⾏流的关闭。这样写的流的建⽴⽐较简单,也是后⾯我们最主要使⽤的⽅式。

6.2 InputStream

6.2.1 InputStream简介

这是⼀个字节输⼊流。从⽅向来说,是⼀个输⼊流,数据是从⽂件中流动到程序中 (数据从其他设备到内存),是为了读取⽂件中的数据的。从数据单位来说,这个流 中流动的数据直接是字节的形式。

6.2.2 文件的读取

注意:

1.为了⽅便测试,我们可以先通过字节输出流或者⼿动在当前⼯程中创建⼀个test1.txt ⽂件,写⼊字符串abcde

2.有三种读取数据的⽅式第⼀:⼀次读取⼀个字节; 第⼆:⼀次读取多个字节; 第三:⼀次读取全部字节

三种读取数据的⽅式中,推荐使⽤第⼆种,⼀次读取多个字节

6.3 OutputStream

6.3.1 OutputStream 简介

字节输出流。从⽅向上来分,是⼀个输出流,数据从程序中流动到⽂件中(数据从内存到其他设备),实现⽂件的写操作。从流中流动的数据单位来分,是⼀个字节流,流中流动的数据直接是字节的形式。

6.4 Reader

6.4.1 Reader的简介

这是⼀个字符输⼊流。从⽅向来说, 是⼀个输⼊流,数据是从⽂件中流动到程序中 (数据从其他设备到内存),是为了读取⽂件中的数据的。 从数据单位来说,这个流中流动的数据以字节为单位的,不同的是在传输过程中加⼊了编码的操作,让我们的操作更⽅便。

6.5 Writer

6.5.1 Writer的简介

字符输出流。 从⽅向上来分,是⼀个输出流,数据从程序中流动到⽂件中(数据从内 存到其他设备),实现⽂件的写操作。从流中流动的数据单位来分,是⼀个字符流,流中流动的数据是以字节为单位,不同的是在传输过程中加⼊了编码的操作,让我们的操作更⽅便。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值