浅析理论:
注:java中,是转义字符,如果要表示一个字符,则必须转义(\)
一、文件路径的抽象(java.io.File)
三个构造器
File(String pathname)
File f = new File("g:/a/b/c.txt");//new File("g:\a\b\c.txt")
File f = new File("c.txt");//相对路径(相对类路径)
File(String parent, String child);//传入父目录和文件字符串路径
File f = new File("g:/a/b", "c.txt");
File(File parent, String child);//传入父目录File对象和文件字符串路劲
File f = new File("c:/a/b");
File f1 = new File(f, "c.txt");
二、常用方法
File[] fs = File.listRoots(); //获取系统所有盘符
String path = fs.getPath(); //返回路径(传入路径)
String path2 = fs.getAbsolutePath(); //返回绝对路径
String path3 = fs.getCanonicalPath(); //返回规范路径【常用】
String path = f.getParent(); //获取父路径
File parent = f.getParentFile(); //获取父路径
f.exists();//判断对应路径文件是否已存在
boolean f.mkdir(); //仅创建当前层级的目录,用于目录的父目录已存在的情况下
boolean f.mkdirs(); //依次创建所有不存在的层级目录
f.createNewFile(); //新建文件,如果此路径的父目录存在的时候才会创建成功
f.delete(); //删除文件
f.renameTo(File dest); //重命名文件
三、常用属性
boolean canExecute(); //可执行
boolean canRead(); //可读
boolean canWrite(); //可写
boolean isAbsolute(); //是否绝对路径
boolean isDirectory(); //是否是目录
boolean isFile(); //是否是文件
boolean isHidden(); //是否是隐藏文件
lastModified(); //最后一次被修改的时间
long length(); //文件的长度
四、遍历、过滤文件
String[] list(); //指定表示目录中的文件和目录
File[] listFiles(); //指定表示目录中的文件和目录
//只能过滤当前层级的,需要通过递归去判断
String[] list(FileFilter filter); //指定表示满足指定过滤器的文件和目录
File[] listFiles(FileFilter filter); //指定表示满足指定过滤器的文件和目录
File[] listFiles(FilenameFilter filter); //指定表示满足指定过滤器的文件和目录
浅析案例:
package com.gongxy;
import java.io.File;
import java.io.FileFilter;
import java.util.Arrays;
/**
* @author gongyg
* @description File简单案例
*/
public class FileTest {
public static void main(String[] args) throws Exception {
//threeConstructorTest();
//getPathTest();
//createDeleteFile();
//commonAttribute();
iteratorFile();
}
/*
File 三个构造器测试
*/
static void threeConstructorTest() throws Exception{
File f1 = new File("f:/测试/a/b.txt");//构造器1
File f2 = new File("b.txt");//这个是项目根路径
File f3 = new File("f:/测试/a", "b.txt");//构造器2
File f5 = new File("f:/测试/a");
File f6 = new File(f5,"b.txt");//构造器3
System.out.println(f1.getCanonicalPath());//F:测试a.txt
System.out.println(f2.getCanonicalPath());//F:3Java-Studymy-java-study-0802.txt
System.out.println(f3.getCanonicalPath());//F:测试a.txt
System.out.println(f5.getCanonicalPath());//F:测试a
System.out.println(f6.getCanonicalPath());//F:测试a.txt
System.out.println(f1.exists());//false
}
/*
获取相关路径的API
*/
static void getPathTest() throws Exception{
File[] fs = File.listRoots();
System.out.println(Arrays.toString(fs));//[C:\, D:\, E:\, F:]
File f = new File("../c.txt");
System.out.println(f.getPath());//..c.txt(传入路径)
System.out.println(f.getAbsolutePath());//F:3Java-Studymy-java-study-0802..c.txt
System.out.println(f.getCanonicalPath());//F:3Java-Studyc.txt
System.out.println(f.getParent());//..
System.out.println(f.getParentFile());//..
}
static void createDeleteFile() throws Exception{
File f = new File("g:/测试/测试a");
boolean result;
if(!f.exists()){
f.mkdir();//false
f.mkdirs();//true
}
File f1 = new File("测试B/b.txt");
if(!f1.exists()){
File f2 = f1.getParentFile();
if(!f2.exists()){
f2.mkdirs();
}
f1.createNewFile();//true
}
if(f1.exists()){
//f1.delete();//只删除了b.txt文件
}
File f3 = new File("测试B/c.txt");
f1.renameTo(f3);//只能在同一个目录下更改,且如果已有文件,则改名失败
}
static void commonAttribute() throws Exception{
File f1 = new File("c.txt");
f1.createNewFile();
boolean result = f1.canExecute();//true
result = f1.canRead();//true
result = f1.canWrite();//true
result = f1.isAbsolute();//false
result = f1.isDirectory();//false
result = f1.isHidden();//false
result = f1.isFile();//true
f1.lastModified();//1598943309757
f1.length();//0
}
static void iteratorFile() throws Exception{
File f = new File("2-App");
String[] sArray = f.list();
System.out.println(Arrays.toString(sArray));
//printPath(f);
File[] fArray = f.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(".java");
}
});
}
static void printPath(File f) throws Exception{
File[] fArray = f.listFiles();
if(fArray.length == 0){
System.out.println(f);
return;
}
for (File f1:
fArray) {
if(f1.isDirectory()){
printPath(f1);
}
System.out.println(f1.getCanonicalPath());
}
}
}