一.构建file对象
构建file对象也就是将file文件加载到java的变量中。
- 1.全名称(全路径)构建
String path = "D:/workspace/stsworkspace/IO_study01/微信图片_20210830150520.jpg";
File src = new File(path);
- 2.父名称(路径),子名称构建
- 3.父对象,子名称构建
- 4.相对路径构建
- 5.可以构建一个不存在的文件
二.文件,路径方法
- 获取文件名
- 获取文件字节数(大小)
文件夹的长度为0;
- 获取路径
构建file时使用相对路径,则返回相对路径;
构建file时使用绝对路径,则返回绝对路径
- 获取绝对路径
- 获取去父路径
构建file时使用相对路径,则返回null
三.文件,状态方法
- 判断文件是否存在
- 判断是否是文件
- 判断是否是目录
- 文件状态判断小方法
File src = new File("xxx");
if(null == src || !src.exists()) {
System.out.println("文件不存在");
}else {
if(src.isFile()) {
System.out.println("文件操作");
}else {
System.out.println("文件夹操作");
}
}
四.创建,删除文件方法
- 创建文件
文件不存在时创建文件,返回true;
文件存在时创建失败,返回flase;
不能创建文件夹;
File src = new File("D:/workspace/stsworkspace/IO_study01/io.txt");
boolean flag = src.createNewFile();
- 删除文件
删除已经存在的文件
File src = new File("D:/workspace/stsworkspace/IO_study01/io.txt");
boolean flag = src.delete();
- 补充
con com3…操作系统的关键字不能正常创建;
下例创建失败
src = new File("D:/workspace/stsworkspace/IO_study01/con");
src.createNewFile();
五.path定义
当路径被copy到java代码中时,""需要被转义。
不适用转义字符定义path有两种方式:
- “/” :名称分隔符
- 常量拼接 File.separatorChar
六.目录方法
- 创建目录1
mkdir():确保上级目录存在,不存在则创建文件失败;不推荐使用
File dir = new File("D:/workspace/stsworkspace/IO_study01/sss/poi.txt");
boolean flag = dir.mkdir();
- 创建目录2
mkdirs():上级目录可以不存在,不存在一同来创建,推荐使用;
File dir = new File("D:/workspace/stsworkspace/IO_study01/sss/poi.txt");
boolean flag = dir.mkdirs();
- 列出下一级名称:list()
File dir = new File("D:/workspace/stsworkspace/IO_study01");
String[] subNames = dir.list();
for(String s :subNames) {
System.out.println(s);
}
- 列出下一级对象:listFiles()
File dir = new File("D:/workspace/stsworkspace/IO_study01");
File[] subFiles = dir.listFiles();
for(File f :subFiles) {
System.out.println(f.getAbsolutePath());
}
- 列出所有盘符:listFiles()
File[] roots = dir.listRoots();
for(File r:roots) {
System.out.println(r.getAbsolutePath());
}
七.利用递归打印子孙级目录和文件名称
public static void printName(File src,int deep) {
//控制层次感
for(int i = 0;i<deep;i++) {
System.out.print("-");
}
//打印名称
System.out.println(src.getName());
if(null == src|| !src.exists()) {//递归头
return;
}else if(src.isDirectory()){//目录
for(File s:src.listFiles()) {
printName(s,deep+1);//递归体
}
}
}
八.使用面向对象:统计文件夹大小
public class DirCount {
// 字节大小
private long len;
// 文件夹路径
private String path;
// 文件个数
private int fileSize;
// 文件夹个数
private int dirSize;
// 文件源
private File src;
public DirCount(String path) {
this.path = path;
this.src = new File(path);
count(this.src);
}
public long getLen() {
return len;
}
public int getFileSize() {
return fileSize;
}
public int getDirSize() {
return dirSize;
}
private void count(File src) {
// 获取大小
if (null != src && src.exists()) {
if (src.isFile()) {// 大小
len += src.length();
this.fileSize += 1;
} else {// 子孙级
this.dirSize += 1;
for (File s : src.listFiles()) {
count(s);
}
}
}
}
public static void main(String[] args) {
DirCount dir = new DirCount("D:/workspace/stsworkspace/IO_study01");
System.out.println("文件字节大小:" + dir.getLen());
System.out.println("文件夹个数:"+ dir.getDirSize());
System.out.println("文件个数:" + dir.getFileSize());
}
}