JAVA高级知识点学习集合五 —— I/O流

一、I/O流分类

字节流:将内存中的数据存储到永久设备,并且从永久设备中读取数据存到内存

字符流:为了能够更好的处理文件中的字符,在字节流的基础之上,增加了对字符的编码能力后, Java提供了专门用于读取和写入字符数据.(底层任然是字节流,只是程序提供了帮你转换字符的过程而已)

二、I/O流的作用

        我们要读取一个文件或者想要从电脑上得到数据,那么必须要在电脑的硬盘上读取。

        而数据在硬盘上是以文件的形式进行存储的,Java通过java.io.File对象实现对硬盘上文件进行操作。( Java要想实现对硬盘文件的操作,那么该文件必须映射到Java的一个java.io.File对象上,设置硬盘上文件的路径。没有这个路径没有办法去追踪到这个对象,也没有办法读取这个文件)

        对于硬盘文件系统来说,存在文件和目录(文件夹)两种,无论是文件还是目录,Java都是用java.io.File对象表示。

三、java.io.File具体操作

Java.io.File文件操作方法:

判断该File对象所代表的是否是一个文件:boolean isFile = file.isFile( );

判断该File对象所代表的文件是否存在;boolean isExists = file.exists( );

将该文件创建到硬盘上boolean isCreated = file.creatNewFile( );

获得该文件的文件名String filename = file.getName( );

获得该文件的绝对路径:String absoluteFilePath = file.getAbsoluteFilePath( );

获得该文件的大小: long length = file.length( );  文件大小的单位是Byte

删除该文件booleaisDelete = file.delete( );  —— 这里的删除是无法在回收站找到 而是直接把该文件数据在硬盘上进行删除

Java.io.File目录操作方法:

因为无论是文件还是目录,对应的都是一个Java.io.File对象,因此使用Java.io.File对象创建一个目录

 根据该目录的路径创建对应的Java.io.File对象 

String dirPath = “    ”;

File file = new (dirPath );

判断该目录是否存在:boolean isExists = file.exists( );

对目录的创建

boolean isCreated = file.mkdir( );  ——  只能创建目录本身如果该目录所在的目录 不存在创建失败

boolean isCreated = file.mkdirs( );  ——  能够实现多级目录的创建如果该目录所在 的目录不存在可以一次性完成这些目录的创建

获得File对象对应目录的名字String dirname = file.getName( );

获得该文件的绝对路径:String absoluteFilePath = file.getAbsoluteFilePath( );

获得该目录是否存在子目录或者文件对应的File数组信息

File [ ] children = file.listFiles( );

创建该目录对应的路径:File file = new File(dirpath);

获得该目录下的所有子目录和文件数组: File[ ] children = file.lisstFiles( );

判断该File对象是否是一个目录 boolean isdir = file.isDirectory( );

判断能否获得子目录和文件

Optional.ofNullable(children ).isPreseent( ) children.length > 0

获取当前字节信息input.read( )

四、I/O流两大组成

IO可以分为输入流和输出流:

(1)输入流:用于将文件中的数据传递到程序中的IO对象称之为输入流;

(2)输出流:用于将程序中的数据传递到文件中的IO对象称之为输出流;

我是程序,数据奔着我来就是输入,从我这里出去就是输出

下图为输入流输出流的具体执行过程!

        我们要想实现将内存中的数据存储到文件中,或者从文件中读取数据到内存中,那么就需要使用I/O (Input/Output)实现。(File相当于管道,Input和Output是管道的两头,IO数据流从这里经过)

 五、字节输入流和字节输出流

(1) 字节输入流的顶级接口是java.io.InputStream , 其最基本的实现类是java.io.FileInputStream (文件字节输入流)。

(2)字节输出流的顶级接口是java.io.OutputStream,最基本的实现类是java.io.FileOutputStrea(文件字节输出流)。

        除此之外其他字节输入流均之为包装流,包装流必须借助于基本流才能工作。使用FileInputStream 读取文件数据是一个字节一个字节的读取,每一次读取都会获得当前字节的字节编码,当所有的字节读取完毕后,会得到一个-1做为标志。对输入流可以增加缓冲区buffer。

六、Java提供了ObjectInputStream和ObjectOutputStream两个包装类,能够实现将对 象写入到文件中,或者将文件中的对象数据读取到程序中(FileInputStream 和 FileOutputStream两个操作是相同的)

  1. 提前写好User类
  2. 分别初始化FileOutputStream和ObjetOutputStream
  3. 关闭输出流,关闭最外层ObjectOutputStream即可
  4. 根据写入文件路径创建FileOutputStream对象
  5. 根据FileOutputStream创建ObjectOutputStream
  6. 创建User类型对象,传递参数
  7. 使用ObjectOutputStream的writerObject( ) —— 写对象方法
  8. 把这个数据变成让它可以存在硬盘上(把数据往硬盘上存都是二进制)二进制序列
  9. 这时候User类要具有一个接口implements Serializable.
  10. 这个时候这个文件就写入成功,程序可以读懂的
  11. 这个时候Java的实现类需要写一个序列号码,是为了可以找到和读取这个文件, 使用java.io.ObjectInputStream读取文件中的对象数据,可以生成一个默认值和 程序自己生成一个唯一值​​​​​​​

下面有一个示例代码,进行解析:

        这个代码的意思是:先从我的桌面上新建一个名为“输入流和输出流.png”的图片,然后新建一个文件把这个图片的路径复制好,

随后我新建一个需要添加这个图片的文件夹路径,把这个图片文件挪到这个文件夹路径里面。

其中我增加了缓冲区,让Java应用程序读一个字节写一个字节,直到把这个文件写入到新的文件之中!

在程序的最后我们要关闭输入流输出流,以避免资源的浪费。

对于使用mac系统的用户建议文件路径可以写成下图所示;windows系统的用户文件路径复制你所在的文件路径即可!!!

 


以上是我对于I/O流的简单学习,希望不足之处请各位大佬多多指教!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值