作者:困了电视剧
专栏:《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();
}
}
}
当我们用字符流读文件的时候,结果就是我们文件中的内容:
我们再读取二进制文件的时候一般使用字节流进行读取,读取一些类似文本文件的时候一般会用字符流进行读取。
以上就是本篇博客的全部内容,如有疏漏还请指正!