File类的概述
java.io.File
类是用来表示文件或者文件夹路径,可以用于对文件和文件夹的创建、查找和删除等操作。
File类的构造方法
-
public File(String pathname)
:通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。 -
public File(String parent, String child)
:从父路径名字符串和子路径名字符串创建新的 File实例。 -
public File(File parent, String child)
:从父抽象路径名和子路径名字符串创建新的 File实例。 -
注意:
-
创建File对象时,如果传入的文件或者文件夹路径不存在,依然不影响File对象的创建
-
File类常用方法
-
绝对路径:从盘符开始的路径,这是一个完整的路径。
-
相对路径:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用。
举例: 文件在G:\CSDN\aaa\a.txt
public class Test {
public static void main(String[] args) {
// 绝对路径
File f1 = new File("G:\\CSDN\\cccc\a.txt");
// 相对路径
File f2 = new File("cccc\\a.txt");
System.out.println(f1.length()+","+f2.length());// 6,6
}
}
获取功能的方法
-
public String getAbsolutePath()
:返回此File的绝对路径名字符串。 -
public String getPath()
:将此File转换为路径名字符串。 构造路径 -
public String getName()
:返回由此File表示的文件或目录的名称。 -
public long length()
:返回由此File表示的文件的长度。 不能获取目录的长度。
判断功能的方法
-
public boolean exists()
:此File表示的文件或目录是否实际存在。 -
public boolean isDirectory()
:此File表示的是否为目录。 -
public boolean isFile()
:此File表示的是否为文件。 -
注意: 如果File对象表示的路径不存在,以上三个方法的返回值都是false
创建删除功能的方法
-
public boolean createNewFile()
:当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。 -
public boolean delete()
:删除由此File表示的文件或目录。 删除文件,或者删除空文件夹, 不能删除非空文件夹 -
public boolean mkdir()
:创建由此File表示的目录。 -
public boolean mkdirs()
:创建由此File表示的目录,包括任何必需但不存在的父目录。
遍历目录方法
-
public String[] list()
:获取File目录中的所有子文件或子目录的名称。
-
public File[] listFiles()
:获取File目录中的所有子文件或子目录的路径。
递归的概述
-
程序中的递归: 方法自己调用自己
-
1.递归没有出口,就会报栈内存溢出错误StackOverflowError
-
2.出口不能太晚了,否则也会报栈内存溢出错误StackOverflowError
文件搜索
-
定义一个方法,用来获取CSDN下面的所有.java文件
-
获取文件夹下的所有子文件和子文件夹
-
循环遍历所有子文件和子文件夹
-
在循环中,判断遍历出来的是文件还是文件夹:
-
如果是文件,就判断文件名是否以.java结尾
-
如果是文件夹,就递归
-
public class Test {
public static void main(String[] args) {
findJavaFile(new File("CSDN"));
}
//定义一个方法,用来获取CSDN下面的所有.java文件
public static void findJavaFile(File file) {
//1. 获取文件夹下的所有子文件和子文件夹
File[] arr = file.listFiles();
//2. 循环遍历所有子文件和子文件夹
if (arr != null){
for (File f : arr) {
//3. 在循环中,判断遍历出来的是文件还是文件夹:
if (f.isFile() && f.getName().endsWith(".java")) {
//4. 如果是文件,就判断文件名是否以.java结尾
System.out.println(f.getAbsolutePath());
}
//5. 如果是文件夹,就递归
if (f.isDirectory()){
findJavaFile(f);
}
}
}
}
}
IO概述
-
I : Input 输入 从其他存储设备读数据到内存中就是输入
-
O : Output 输出 从内存中写数据到其他存储设备
IO的分类
-
按照类型分: 字节流和字符流
-
字节流:
-
字节输入流: 以字节为基本单位,进行读数据
-
字节输出流: 以字节为基本单位,进行写数据
-
-
字符流:
-
字符输入流: 以字符为基本单位,进行读数据
-
字符输出流: 以字符为基本单位,进行写数据
-
-
-
按流向分: 输入流和输出流
-
输入流: 读数据
-
字节输入流: 以字节为基本单位,进行读数据
-
字符输入流: 以字符为基本单位,进行读数据
-
输出流: 写数据
-
字节输出流: 以字节为基本单位,进行写数据
-
字符输出流: 以字符为基本单位,进行写数据
-
-
IO的顶层父类
-
字节流:
-
字节输入流: 顶层父类是InputStream抽象类
-
字节输出流: 顶层父类是OutputStream抽象类
-
-
字符流:
-
字符输入流: 顶层父类是Reader抽象类
-
字符输出流: 顶层父类是Writer抽象类
-
注意事项
-
utf8编码一个中文占3个字节,gbk编码一个中文占2个字节
-
idea默认编码是utf8
-
如果存储和解析的编码不一致就会乱码
字节输出流【OutputStream】
OutputStream类的概述
-
概述:
java.io.OutputStream
抽象类是表示字节输出流的所有类的父类 -
作用:
-
将指定的字节信息写出到目的地文件中。
-
它定义了所有字节输出流的基本共性功能方法。(所有类都继承了OutputStream)
-
OutputStream类的常用方法
-
public void close()
:关闭此输出流并释放与此流相关联的任何系统资源。 -
public abstract void write(int b)
:写出一个字节数据到目的地文件中。 -
public void write(byte[] b)
:将 b.length字节写出到目的地文件中。 -
public void write(byte[] b, int off, int len)
:从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。
FileOutputStream类
-
概述: java.io.FileOutputStream类继承了OutputStream类,所以也是表示字节输出流,可以用来写出字节数据到目的地文件中.
-
构造方法
-
public FileOutputStream(File fPath) 创建一个字节输出流对象,关联的文件通过参数来指定
-
public FileOutputStream(String path) 创建一个字节输出流对象,关联的文件通过参数来指定
-
注意:
-
如果关联的文件不存在,就会自动创建一个新的空文件
-
如果关联的文件存在,就会清空源文件中的数据
-
-
-
public FileOutputStream(File path,boolean append) 创建一个字节输出流对象,关联的文件通过参数来指定
-
public FileOutputStream(String path,boolean append) 创建一个字节输出流对象,关联的文件通过参数来指定
-
注意:
-
如果关联的文件不存在,就会自动创建一个新的空文件
-
如果关联的文件存在,并且第二个参数设置为true,就不清空源文件中的数据,否则就清空(false)
-
-
字节输入流【InputStream】
-
InputStream类的概述
概述:
java.io.InputStream
抽象类是表示字节输入流的所有类的超类,InputStream类的常用方法
-
public void close()
:关闭此输入流并释放与此流相关联的任何系统资源。 -
public abstract int read()
: 读一个字节。 -
public int read(byte[] b)
: 读一个字节数组
FileInputStream类
-
概述: java.io.FileInputStream类继承InputStream类,也表示字节输入流,可以用来读字节数据到内存中.
-
构造方法
-
public FileInputStream(File fPath); 创建字节输入流对象,通过参数关联数据源文件路径.
-
public FileInputStream(String path); 创建字节输入流对象,通过参数关联数据源文件路径.
-
- 能够使用FileReader读数据一次一个字符
int read() 读一个字符
- 能够使用FileReader读数据一次一个字符数组
int read(char[] chs) 读一个字符数组
- 能够说出FileWriter中关闭和刷新方法的区别
关闭: 关闭流,刷新缓冲区,流不能再使用
刷新: 刷新缓冲区,流可以继续使用
- 能够使用FileWriter写数据实现换行和追加写
public FileWriter(String path,boolean append)
public FileWriter(File path,boolean append)
回车换行--->"\r\n"