Java IO流

47 阅读5分钟

I/O流

在开发中,在我们真正书写的程序中,往往有一些数据是需要长久保存起来的,当程序中需要这些长久保存起来的数据的时候,再从其他的地方读取到程序中。

也就是说我们以前学习的数据都是存储到内存中,而内存中只能暂时存储数据,当电脑关闭之后,数据就不见了。如果在开发中需要大量数据被长久保存,下次开电脑这些数据仍然还在,那么我们肯定不能保存到内存中,我们需要保存在能够保存持久数据的地方或者叫持久设备。

什么是持久设备

持久设备:可以持久保存数据的设备。硬盘、U盘、光盘、网盘、软盘等。这些设备都可以长久的保存数据。

如何把程序中的数据保存到持久设备中?

Java提供了一个技术,专门来实现数据与持久设备间的交互:IO技术。

通过IO技术就可以达到程序和其他设备之间的数据交互。

什么是IO技术

IO技术:它主要的功能就是把我们程序中的数据可以保存到程序以外的其他持久设备中(如:我们电脑的硬盘),或者从其他持久设备中(如:我们电脑的硬盘)进行读取数据,把数据读取到我们的Java程序中。

IO:

I:Input:输入或者读取,从持久设备(硬盘)的数据放到内存中;

O:Output:输出或者写出,从内存中的数据放到持久设备(硬盘)上;

也可以按照如下理解:

把从持久设备(硬盘)上读取(输入)到内存中的动作,称为读操作。 I:input。

把内存中的数据输出(写出)到持久设备(硬盘)的动作,称为写操作。O:output。

image.png

File类

File类介绍

数据最终保存在硬盘上,在硬盘上是以1和0 保存的。而给我们展示出来的并不是二进制数据,而是一个一个的文件,换句话说数据最终都保存在这些文件中。而这些文件又被文件夹管理。

     通过上述描述我们发现在计算机硬盘中就存在两种事物:文件和文件夹事物。而在Java中使用class类来描述生活中存在的事物,那么Java中是如何描述文件和文件夹这两类事物呢?

使用File类来描述文件和文件夹事物。

image.png

File类它主要是对持久设备上的文件和文件夹进行操作。它不能去操作文件中的数据。将来我们只要需要操作持久设备上的文件或文件夹直接找File类完成,如果要操作文件中的数据只能找后面学习的IO技术搞定;

1)public File(String pathname) 表示根据文件或文件夹的路径名创建一个File对象。

使用File类的构造函数可以把指定的字符串封装成File类的对象,但是这个字符串表示的路径或者文件到底是否存在,File类是不进行判断的。

注意:File类表示文件和目录路径名的抽象表示形式。那么该路径代表的文件或文件夹不一定存在。

需求:创建一个File类的对象,表示:D:\abc\1.txt

2)public File(String parent,String child) 根据父目录的路径名和儿子的名称创建一个File对象。

需求:创建一个File类的对象,表示:D:\abc\1.txt

3)public File(File parent,String child) 根据父目录的File对象和儿子的名称创建一个File对象。

就是把已经存在的File对象和某个子目录合并成一个新的File对象。

分析和步骤:

A:创建一个File类的对象parent,D:\abc作为参数;

B:定义一个字符串child=1.txt;

C:使用上述构造函数在重新创建一个File类的对象file,并输出打印;

获取方法

File类是描述文件和文件夹的。使用File类的对象就可以获取当前File类描述的那个文件或文件夹的信息(信息包括文件或者文件夹的名称、大小、类型、日期等)。

案例:File类中的获取方法。

A:getAbsolutePath() 获取的当前调用这个方法的File对象的全路径(绝对路径或者真实路径) 返回的是路径的字符串;

B:getAbsoluteFile()获取的当前调用这个方法的File对象的全路径(绝对路径或者真实路径) 返回的是路径封装成的新的File;

 

说明:在操作文件时,需要指定文件的路径,而路径在程序中有两种表现形式:

绝对路径:是从盘符开始的路径,带有根目录的路径   例:  D:\abc\test\Demo.java     D就是根目录。

相对路径:是从当前路径开始的路径,或者可以理解不带根目录的路径  

例:当前路径为D:\abc,要描述相对路径,只需输入test\Demo.java

实际上,严格的相对路径写法应为:  .\test\Demo.java

其中,. 表示当前路径。

C:getName() 获取的是File类的对象中封装的文件或目录的最后一级名称;

D:getParentFile() 获取到的是File类的对象的父目录,把父目录封装成一个新的File对象;

E:getParent() 获取到File类的对象的父目录,把返回目录的字符串表示形式;

F:getPath() 获取到当前File类的对象中封装的内容;

G:getFreeSpace() 获取某个盘的剩余空间;

H:getTotalSpace() 获取某个盘的总空间;

I:public static File[] listRoots() 获取系统的所有根目录,例如:C盘、D盘、E盘、F盘;

说明:由于该函数是静态的,直接使用类名调用即可。