文章目录
- 概述
- 什么是IO流?
- 常用的文件操作
- 获取文件操作
- 目录操作
- IO流的原理和分类
概述
在Java的学习中,文件和IO流是一个十分重要的板块。在Java中,File是文件和目录路径名的抽象表示。文件和目录可以通过File封装成对象。对File而言,其封装的并不是一个真正存在的文件,仅仅只是一个路径名而已,他可以是存在的也可以是不存在的。将来是要通过具体操作把这个路径的内容转化为具体存在的。
什么是IO流?
IO流也叫文件流。其实就是计算机调度把各个存储中(包括内存和外部存储)的数据写入写出的过程(通过IO可以完成硬盘文件的读和写)
- I:input(输入)
- O:Output(输出)
文件在程序中是以流的形式操作的(文件是保存数据的地方)
- 输入流:数据从数据源(文件)到程序(内存)的路径
- 输出流:数据从程序(内存)到数据源(文件)的路径
常用的文件操作
根据路径构建一个File对象
new File(String pathname);
根据
new File(File parent, String child);
根据
new File(String parent, String child);
createNewFile方法 创建新文件
将内存的File写入到硬盘中,如果命名文件不存在且已成功创建,则此方法返回 true。 如果文件存在,该方法返回 false。
官方文档(采用JD8版本)
- 中文
- English
File实现了Serializable(串行化)和Comparable(比较)两个接口
一个类实现了 Comparable 接口,意味着该类的对象可以直接进行比较
演示
- 方式1 new File(String pathname);
import java.io.File;
import java.io.IOException;
@Test
public void create01(){
String filePath = "E:\\text.txt";
File file = new File(filePath);
try {
file.createNewFile();
} catch (IOException e) {
e.getMessage();
}
System.out.println("文件创建成功");
}
此时E盘下会出现text文件
- 方式2 new File(File parent, String child); 父目录文件+子路径
@Test
public void create02(){
File parentfile = new File("E:\\");
String fileName = "text2.txt";
File file = new File(parentfile, fileName);
try {
file.createNewFile();
} catch (IOException e) {
e.getMessage();
}
}
此时E盘下会出现text2文件
- 方式3 new File(String parent, String child); 父目录+子路径
@Test
public void create03(){
String parentPath = "E:\\";
String filePath = "text3.txt";
File file = new File(parentPath, filePath);
try {
file.createNewFile();
} catch (IOException e) {
e.getMessage();
}
}
此时E盘下会出现text3文件
注意:路径也可也用 / 这个,只不过用 \ 的时候需要在加上一个(转义字符)
获取文件操作
基本的常用方法(并不是全部)
- getName 获取文件的名字
- getAbsolutePath 获取文件的绝对路径
- getParent 获取文件的父级目录
- length 获取文件的大小
- exists 文件是否存在
- ifFile 是否是一个文件(File)
- isDirectory 文件是否是目录
更多方法可在JDK文档或百度进行查看
演示
@Test
public void info(){
//先创建文件对象
File file = new File("E:\\text1.txt");
//调用相应的方法
System.out.println("文件名字:"+file.getName());
System.out.println("文件绝对路径:"+file.getAbsolutePath());
System.out.println("文件父级目录:"+file.getParent());
System.out.println("文件大小(字节):"+file.length());
System.out.println("文件是否存在:"+file.exists());
System.out.println("是否存在:"+file.isFile());
System.out.println("文件是否为目录:"+file.isDirectory());
}
输出:
文件名字:text1.txt
文件绝对路径:E:\text1.txt
文件父级目录:E:
文件大小(字节):11
文件是否存在:true
是否存在:true
文件是否为目录:false
目录操作
- mkdir 创建一级目录
- mkdirs 创建多级目录
- delete 删除空目录或文件
删除文件(目录),返回的是一个布尔值,成功为true,失败为false
import java.io.File
import org.junit.jupiter.api.Test;
@Test
public void m1(){
String filePath = "E:\\text1.txt";
//String filePath = "E:\\text";//删除text目录同理
File file = new File(filePath);
file.delete();
}
E盘下的text.txt文件被删除
创建一级目录(mkdir)
@Test
public void m2(){
String filePath = "E:\\text";
File file = new File(filePath);
file.mkdir();
}
此时E盘会出现text目录
创建多级目录(mkdirs)
@Test
public void m2(){
String filePath = "E:\\text\\text2\\text3";
File file = new File(filePath);
file.mkdirs();
}
IO流的原理和分类
- I/O是Input/Output的缩写,I/O技术是非常实用的技术,用于处理数据传输(如读/写文件,网络通信等)
- Java程序中,对于数据的输入 / 输出操作以 “流(stream)” 的方式进行
- Java.io 包下提供了各种 “流” 类和接口,用以获取不同种类的数据,并通过方法输入或输出数据
- 输入input:读取外部数据(磁盘、光盘、数据库、网络等存储设备的数据)到程序(内存)中
- 输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中
分类
- 按操作数据单位不同分为:字节流(8bit)二进制文件,字符流(按字符,一个字符对于多少个字节和编码有关)文本文件
- 按数据流的流向不同分为:输入流、输出流
- 字节流主要是由InputStream和outPutStream作为基类,而字符流则主要有Reader和Writer作为基类。
- 按流的角色的不同分为:节点流、处理流/包装流
- 可以从/向一个特定的IO设备(如磁盘,网络)读/写数据的流,称为节点流。
- 处理流则用于对一个已存在的流进行连接和封装,通过封装后的流来实现数据的读/写功能。
- InputStream
- OutputStream
- Reader
- Writer
以上四个均为抽象类(abstract),在使用的时候要去创建它们的实现子类!
在Java的IO流共涉及40多个类,实际上非常规则,都是从以上四个抽象基类派生的
由这四个类派生出来的子类名称都是以其父类名作为子类的后缀名