文件基础
文件在计算机中是保存在“硬盘”中的。
操作系统在把硬盘操作进行了封装,在编程时是不会对硬盘进行直接操作的,而是通过文件进行操作硬盘的,直接通过打开文件,修改文件等操作进行简化,又通过文件资源管理器进行对文件的管理。
文件路径
通过一个路径进行描述一个文件的位置,同一台机器上文件路径得是唯一的。
从根目录开始到目标文件的每一级目录通过 \ 来区分,最后得到的就是路径。
基准 / 绝对路经:是指一盘符开头的路径,例如D \ 文件夹1 \文件夹2 \ 文件名
相对路径:是指一 . 或 .. 开头的文件路径,例如 .\文件名
文件种类
文件主要分为两个大类:
1.文本文件:文本文件里存的都是合法的字符
2.二进制文件:二进制文件里面存什么都可以
Java进行操作文件
1.文件系统操作
文件系统操作类似于创建文件,删除文件,移动文件等。
Java中提供了File这个类进行文件系统操作,构造File对象关键就是路径,通过获取到路径的file对象来操作文件或目录。
我们可以通过填写绝对路径或相对路径来进行构造对象,但是如果我们填写的是相对路径,那么他的基准目录是当前项目提示的路径,通过alt+f12就可以看到。
file中的一些方法:
上面就实现了一些方法,这里我们认识到一个新的异常IOException。
2.文件内容操作
文件内容操作分为读文件和写文件:
1)读文件:将硬盘中的内容读到内存。
2)写文件:将内存中的内存写到硬盘。
两者都是通过流(Stream)对象来实现的,Stream分为字节流和字符流
2.1字节流
2.1.1 字节流指的是以字节为基本单位,一次性最少读取一个字节。
2.1.2 里面的读操作是通过 InputStream类来实现,写操作是通过OutputStream来实现的。
2.1.3 读写二进制文件通常使用字节流。
InputStream
2.1.4 InputStream是抽象类,不能直接实例化,只能实例化继承他的子类FileInputStream;在流对象中不仅仅只是可以从文件中读写数据,也可以从网络中读取数据,这里的FileInputStream就是在文件中操作。
2.1.5在操作系统中操作文件首先要打开文件,在Java中创建一个流对象就是对应到打开文件。
2.1.6 InputStream中的核心方法read,可以读取字节返回一个整形,read一共有三个版本:
一次读一个字节,一次读一个字节数组,一次读一个字节数组但是有范围。
但是他们读完时都会返回-1。
读取一个文件并用16进制表示:
2.1.7 当操作完文件后需要将文件关闭,此时要调用close方法,否则可能会造成文件资源泄漏,导致后面文件打开失败。
所以可以通过将流对象放到try()中创建,此时就可以使文件在执行完后自动关闭:
OutputStream
2.1.8 OutputStream使用write进行写入,write也有三个方法实现:一个是写入一个整数,一个写入一个字节数组,一个写入字节数组但是限制了范围。
2.1.9 OutputStream进行写入后再次打开就会清空文件内容,要想保留上次的内容就要再new对象是加一个参数true,此时就可以保留上一次的内容了。
2.1.8 和Inputstream一样也是结束需要关闭文件,使用try就可以解决。
2.2字符流
字符流指的是以字符为基本单位,一次性最少读取一个字符。
里面的读操作通过Reader实现,写操作通过Writer实现。
读写文本文件通常使用字符流。
Reader也是抽象类,需要创建子类实例FileRead,核心方法read类似
Writer也是抽象类,只不过在writer的方法中可以直接写入一个字符串。
文件内容的核心是打开文件,进行读写操作,关闭文件。