在java中,存储数据一般有如下几种方法:
而它们都是内存中的数据容器
它们记住的数据,在断电,或者程序终止时会丢失
这种时候就可以使用File类和Io流,就数据存储在文件中
File
- File是java.io.包下的类, File类的对象,用于代表当前操作系统的文件(可以是文件、或文件夹)
- 注意:File类只能对文件本身进行操作,不能读写文件里面存储的数据
File对象的创建方法
File.separator:代替路径分隔符(/、\\...),跨平台
绝对路径、相对路径
- 绝对路径:从盘符开始
- 相对路径:不带盘符,默认直接到当前工程下的目录寻找文件
File提供的判断文件类型、获取文件信息功能
代码演示:
import java.io.File;
import java.text.SimpleDateFormat;
public class FileIoTest2 {
public static void main(String[] args) {
//1.创建文件对象,指代某个文件
File f1 = new File("D:/File/dzy.txt");
// 2、public boolean exists():判断当前文件对象,对应的文件路径是否存在,存在返回true.
System.out.println(f1.exists()); //true
// 3、public boolean isFile(): 判断当前文件对象指代的是否是文件,是文件返回true,反之。
System.out.println(f1.isFile()); //true
// 4、public boolean isDirectory() : 判断当前文件对象指代的是否是文件夹,是文件夹返回true,反之。
System.out.println(f1.isDirectory()); //false
// 5.public string getName():获取文件的名称(包含后缀)
System.out.println(f1.getName()); //dzy.txt
// 6.public long length():获取文件的大小,返回字节个数
System.out.println(f1.length()); //9
// 7.public long lastModified():获取文件的最后修改时间。
long time = f1.lastModified(); //2024-03-21 21:23:18
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(time));
// 8.public string getPath():获取创建文件对象时,使用的路径
System.out.println(f1.getPath()); //D:\File\dzy.txt
// 9.public string getAbsolutePath():获取绝对路径
System.out.println(f1.getAbsolutePath()); //D:\File\dzy.txt
}
}
运行结果:
File类创建文件的功能
File类删除文件的功能
注意:delete方法默认只能删除文件和空文件夹,删除后的文件不会进入回收站
代码演示:
import java.io.File;
import java.io.IOException;
public class FileIoTest3 {
public static void main(String[] args) throws IOException {
//1、public boolean createNewFile():创建一个新文件(文件内容为空),创建成功返回true,反之。
File f1 = new File("D:/File/a.txt");
System.out.println(f1.exists()); //false
System.out.println(f1.createNewFile()); //true
// 2、public boolean mkdir():用于创建文件夹,注意:只能创建一级文件夹
File f2 = new File("D:/File/ddd");
System.out.println(f2.mkdir()); //true
// 3、public boolean mkdirs():用于创建文件夹,注意:可以创建多级文件夹
File f3 = new File("D:/File/aaa/bbb/ccc");
System.out.println(f3.mkdirs()); //true
//3、public boolean delete():删除文件,或者空文件,注意:不能删除非空文件夹。
System.out.println(f1.delete()); //true
System.out.println(f2.delete()); //true
File f4 = new File("D/File");
System.out.println(f4.delete()); //false
}
}
运行结果:
File类提供的遍历文件夹的功能
代码演示:
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
public class FileIoTest4 {
public static void main(String[] args) throws IOException {
//1、public string[] list():获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。
File f1 = new File("D:/File");
String[] list = f1.list();
for (String s : list) {
System.out.println(s);
}
System.out.println("-------------------------------------------");
//2、public File[]listFiles():(重点)获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
File[] files = f1.listFiles();
for (File file : files) {
System.out.println(file.getAbsolutePath());
}
System.out.println("-------------------------------------------");
//通过递归和listFiles()遍历文件夹下每个文件
Arrays.stream(files).forEach(f -> new FileAllName() {
@Override
public void AllName(File f) {
System.out.println(f.getName());
if(f.isDirectory()){
for (File file : f.listFiles()) {
AllName(file);
}
}
}
}.AllName(f));
}
}
interface FileAllName{
void AllName(File f);
}
运行结果:
使用listFiles方法时的注意事项:
- 当主调是文件,或者路径不存在时,返回null
- 当主调是空文件夹时,返回一个长度为0的数组
- 当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹的路径放在File数组中返回
- 当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
- 当主调是一个文件夹,但是没有权限访问该文件夹时,返回null