> 文章列表 > 【剧前爆米花--爪哇岛寻宝】java文件操作和io流

【剧前爆米花--爪哇岛寻宝】java文件操作和io流

【剧前爆米花--爪哇岛寻宝】java文件操作和io流

作者:困了电视剧

专栏:《JavaEE初阶》

文章分布:这是一篇关于文件操作的文件,介绍了文件读写以及相关对象的内容,希望对你有所帮助!

 

目录

文件操作

文件路径

绝对路径

相对路径

File类

File类的构造方法

文件内容的读写——数据流

字节流

字符流


文件操作

我们平时谈到的“文件”,指的都是硬盘上的文件,但是由于硬盘访问速度慢等特性,我们的代码绝大多数都是围绕内存进行展开。

MySQL主要就是操作硬盘,文件IO在这里主要也是操作硬盘。

文件操作主要分为两个部分:

1.文件系统操作

   创建文件,删除文件,重命名文件以及创建目录等

2.文件内容操作

   针对文件内容进行读 和 写。

文件路径

这地方就是每一个文件的路径,指向一个文件的具体位置。

计算机的目录是有层级结构的,可以将文件的存储想象成一个树型结构,这样文件路径就可以理解为,从树的根节点出发,沿着树枝,一路往下走,到达目标文件,此时这中间经过的内容。

绝对路径

从盘符开始,一层一层向下找,这个过程得到的路径就是绝对路径。

如上图所示,此时D:/bitStudy/bit_java/tmp就是该文件的绝对路径.

注:这里要是用正斜杠不要使用反斜杠,使用反斜杠在编写代码的时候需要打两次进行转义,但正斜杠则不需要。

相对路径

从给定的某个目录出发,一层一层往下找,这个过程得到的路径就是相对路径。

一定要明确,基准目录(工作目录)是什么,否则则很有可能出错

tips:.在相对路径中是一个特殊符号,表示当前目录。

        .. 也是特殊符号,表示当前目录的上级目录,就比如:

我现在想访问c_c++这个目录文件,但是我的基准目录到bitStudy,怎么办?答案:直接使用../。

../ c_c++,../让我们到了D:/这一层,在直接访问即可。

举个栗子:

比如我的工作目录是D:/bitStudy,那我的相对路径就可以表示为:

./bit_java/tmp

File类

java标准库,给我们提供了File这个类,我们的代码为了提高效率并不直接操控硬盘而是内存,这个File对象就是硬盘上的一个文件的“抽象”表示。

文件是存储在硬盘上的。

直接通过代码操作硬盘并不方便,于是就在内存中创建一个对应的对象,操作这个内存中的对象,就可以间接的影响到硬盘的文件情况了。

File类的构造方法

文件内容的读写——数据流

针对文本文件,提供了一组类,统称为“字符流”(典型代表 Reader, Writer),他读写的基本单位是字符。

针对二进制文件,也提供了一组类,统称为“字节流”(典型代表 InputStream,OutputStream),读写的基本单位是字节。

使用数据流必须要在使用结束后进行关闭,否则在某些环境下会造成很严重的问题。这几个典型类都实现了一个Closeable接口。

当我们在使用实现这些接口的类时,可以使用这样的一个语法:

 这样,当我们执行完try括号中的语句后,就会自动关闭流,降低出错的可能。 

字节流

public class Test {public static void main(String[] args) throws FileNotFoundException {File file = new File("d:/bitStudy/bit_java/tmp/test.txt");try (InputStream inputStream = new FileInputStream(file)){while (true){int b = inputStream.read();if (b == -1){break;}System.out.println(b);}}catch (IOException e){e.printStackTrace();}}
}

我的上述代码实现的功能是将该文件中的内容用字节的方式读出来,结果如下: 

由图我们可以看到,java将文件中的内容用ASCII码的形式读了出来,这就是字节流。

字符流

字符流相关的方法比较多,在这里我先梳理一下,首先Writer是一个抽象类,PrintWriter类,OutputStreamWriter类继承Writer类,FileWriter类继承OutputStreamWriter类

public class Test {public static void main(String[] args) throws FileNotFoundException {File file = new File("d:/bitStudy/bit_java/tmp/test.txt");try (InputStream inputStream = new FileInputStream(file)){Scanner scanner = new Scanner(inputStream);while (scanner.hasNext()){String  b = scanner.next();System.out.println(b);}}catch (IOException e){e.printStackTrace();}}
}

当我们用字符流读文件的时候,结果就是我们文件中的内容:

 我们再读取二进制文件的时候一般使用字节流进行读取,读取一些类似文本文件的时候一般会用字符流进行读取。

以上就是本篇博客的全部内容,如有疏漏还请指正!