File类可以对我们资源管理器里边的文件夹及文件进行一些操作
下边的是创建及使用的基本规则
import java.io.File;
import java.io.IOException;
public class FileTest {
public static void main(String[] args) {
// 硬盘上的任何文件在Java中都可以使用File 类表示
// pathname表示文件的路径
File f1 = new File("D:\\JavaTest\\1.txt");
// 通过第一个\来获取第二个\的本来含义 转义字符
File f2 = new File("D:/JavaTest/2.txt");
System.out.println("f1文件是否存在:" + f1.exists());
System.out.println("f2文件是否存在:" + f2.exists());
File f3 = new File("3.txt");
System.out.println("f3文件是否存在:" + f3.exists());
// 绝对路径: 从盘符开始的路径 "D:\JavaTest\2.txt"
// 相对路径: 从当前文件夹开始的路径 .\3.txt
// .表示当前文件夹, 可以省略
// 相对路径是相对WorkSpace项目的文件夹为起始
// 获取对象的路径
System.out.println(f3.getAbsolutePath());
// 不同的操作系统对路径中的分隔符有不同的表示方式
// File.separator 常量能自动根据操作系统设置分隔符
// 解决跨平台路径不一致的问题,推荐写法
File f4 = new File("D:"+File.separator + "JavaTest" + File.separator + "3.txt");
// 创建或者删除的时候,一定要先试用exists()判断文件是否存在
// 只有文件存在时才进行删除操作,不存在才进行创建操作
// 创建和删除操作可能需要延迟
f1.delete();
try {
f1.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 重命名
File f5 = new File("D:JavaTest/5.txt");
f1.renameTo(f5);
// File 没有复制操作
// File只操作文件,不处理里面的内容
}
}
File的一些方法的使用
import java.io.File;
public class FileTest2 {
public static void main(String[] args) {
File f1 = new File("D:\\JavaTest");
if (f1.exists()) {
System.out.println("文件存在!");
// 必须保证文件夹中没有任何内容才能删除
boolean flag = f1.delete();
if (flag) {
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
}else {
// 创建文件夹 必须保证路径上每一个文件夹都存在
boolean flag = f1.mkdir();
if (flag) {
System.out.println("创建成功");
}else {
System.out.println("创建失败");
}
}
// DOS命令:mkdir make directory 创建文件
// mkdir() 必须保证路径上的父文件夹都存在
System.out.println("创建是否成功:" + f1.mkdir());
// mkdirs() 创建路径上所有不存在的文件夹
System.out.println("创建是否成功:" + f1.mkdirs());
}
}
import java.io.File;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Date;
public class FileTest4 {
public static void main(String[] args) {
File f1 = new File("D:/JavaTest/1.txt");
System.out.println("是不是文件:" + f1.isFile());
System.out.println("是不是文件夹:" + f1.isDirectory());
System.out.println("可读:" + f1.canRead() );
System.out.println("可写:" + f1.canWrite() );
System.out.println("是否是隐藏文件" + f1.isHidden());
System.out.println("大小:" + f1.length()); // 字节
// 时间戳 : 从1970年1月1日00:00:00到指定时间经过了多少毫秒
System.out.println("最后修改时间:" + f1.lastModified());
// 时间戳转化为对应的日期 1
LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(System.currentTimeMillis()/1000, 0,ZoneOffset.ofHours(8));
System.out.println(localDateTime);
// 时间戳转化为对应的日期 2
Date date = new Date(f1.lastModified());
System.out.println(date);
File f2 = new File("D:/JavaTest");
// 不包含文件夹中的文件大小
System.out.println("文件夹大小:" + f2.length());
}
}
使用File类的方法,可以写一个遍历文件夹的方法
使用的递归的方法.
import java.io.File;
public class FileTest5 {
public static void main(String[] args) {
File f1 = new File("D:/");
String[] names = f1.list();
for (String name : names) {
// System.out.println(name);
}
// 当前文件夹下所有的文件对象
File[] files = f1.listFiles();
// 遍历所有对象
for (File file : files) {
// System.out.println(file.getName());
}
int x = getDirectoryLength(f1);
System.out.println(x);
}
public static int getDirectoryLength(File file){
int result = 0;
// 大小 = 所有文件的大小 + 所有文件夹的大小
// 1.获取所有的文件
File[] files = file.listFiles();
// 2.遍历进行累加
for (File file2 : files) {
if (file2.isFile()) {
// 普通文件通过length() 获取长度进行类加
result += file2.length();
System.out.println(file2.getName());
}else if(file2.isDirectory()) {
// 文件夹通过自己的方法再获取长度
result += getDirectoryLength(file2);
// 方法内部调用自己的方式叫做递归
// 一定存在终止的条件,否则就会产生死循环
// 一定会有一个文件夹没有子文件夹
}
}
return result;
}
}