1、静态常量
static String pathSeparator 与系统相关的路径分隔符字符,为方便起见,表示为字符串。
static String separator 与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串。
String pathSeparator = File.pathSeparator;
String separator = File.separator;
System.out.println(pathSeparator); //返回windows ; linux :
System.out.println(separator); //返回Window \ linux /
2、构造方法
路径可以是绝对路径,也可以是相对路径,可以存在也可以不存在
File(String pathname)
File(File parent, String child)
File(String parent, String child)
File file = new File("/Users/Downloads");
System.out.println(file.toString());
File file1 = new File("/Users/Downloads", "1.txt");
System.out.println(file1.toString());
File parent = new File("/Users/Downloads");
File file2 = new File(parent, "2.txt");
System.out.println(file2.toString());
3、相对路径绝对路径
绝对路径:带盘符的路径,唯一, c:\a\1.txt
相对路径:不带盘符,不唯一
同一个文件夹下:直接引用名字 b.txt
下一级文件夹下:ccc\c.txt
上一级目录:…\a.txt
idea中所有的相对路径都是相对于当前的project的
4、常用方法
public boolean createNewFile()
当且仅当具有该名称的文件不存在时,创建一个新的空文件
public static void main(String[] args)throws IOException {
File file = new File("/Users/daiyuanru/Downloads/1.txt"); //此方法只能创建文件,不能创建文件夹
boolean b=file.createNewFile(); //如果当前位置有这个文件,创建成功返回true,如果没有,创建失败返回false
System.out.println(b);
public boolean mkdir()
创建由此File表示的目录,此方法只能创建单级文件夹,如果想要创建多级文件夹,使用mkdirs()方法
public static void main(String[] args)throws IOException {
File dir = new File("/Users/daiyuanru/Downloads/aa"); //此方法只能创建文件夹,不能创建文件
boolean b=dir.mkdir(); //如果当前位置有这个文件夹,创建成功返回true,如果没有,创建失败返回false
System.out.println(b);
public boolean mkdirs() 创建由此File表示的目录,包括任何必需但不存在的父目录(多级)
public boolean delete()此方法可以删除文件,也可以删除文件夹,但是只能删除空文件夹,多级的文件夹不行,直接删除,不走回收站
public boolean exists()判断路径是否存在
public boolean isFile()判断是否是文件,这个方法会优先判断路径是否存在,然后再考虑是否是文件
public boolean isDirectory()判断是否是文件夹,同理先判断路径
public String getAbsolutePath()返回此File的绝对路径字符串
public String getPath()返回构造方法给出的路径
public String getName()返回由此File表示的文件或目录名称
public longlength()返回由此File表示的文件字节数,文件不存在也有可能为0字节
public File getParentFile()返回由此File表示的文件或目录的父目录,如果没有父目录,就返回null
String[ ] list()获取指定文件夹下,所以文件和文件夹的名字
File[ ] listFiles()获取指定文件夹下所有的File对象,如果路径不存在,或者路径是文件,返回null值,会报空指针异常
File[ ] listFiles(FileFilter filter)
返回一个数组,满足指定过滤器的目录中的文件和目录
public class MyFileFilter implements FileFilter {
@Override
public boolean accept(File pathname) {
//返回的是以.txt结尾的文件
return pathname.getName().toLowerCase(Locale.ROOT).endsWith(".txt");
}
}
public static void main(String[] args) throws IOException {
File file = new File("/Users/Downloads/");
File[] files = file.listFiles(new MyFileFilter());
//accept方法返回true则将文件放入files,如果返回false则不放
for (File thisFile : files) {
System.out.println(thisFile.getName());
}
}
5、递归获取多级文件
递归的注意事项:
1、递归一定要有出口,否则就是死递归
2、递归次数不能过多,会造成内存溢出
3、构造方法不能递归
public static void main(String[] args) throws IOException {
File file = new File("/Users/Downloads/");
show(file);
}
public static void show(File file) {
File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
//是文件夹就返回true
if (pathname.isDirectory()) {
return true;
}
//不是文件夹,如果末尾是txt结尾,就返回true
return pathname.getName().toLowerCase(Locale.ROOT).endsWith(".txt");
}
});
for (File thisFile : files) {
if (thisFile.isDirectory()) {
//是文件夹就递归
show(thisFile);
} else {
System.out.println(thisFile);
}
}
}
}