文件分隔符
File对象的创建
文件路径获取
文件夹的创建
文件以及文件夹的遍历
文件过滤器
文件分隔符
- 在windows中\代表文件分隔符
- 在lunix中/代表文件分隔符
- 路径名称不区分的大小写
- 一般不降分隔符写死了
import java.io.File;
public class Demo01File {
/**
* 路径名称不区分的大小写
* 在windows中\代表分隔符,要以转义字符行式体现即\\
*
* */
public static void main(String[] args) {
//路径分隔符;
String path = File.pathSeparator;
System.out.println(path);
//文件名称分隔符
/**
* windows: \
* lunix: /
* 注意:在文件操作时分割符不要写死了
* */
String seperator = File.separator;
System.out.println(seperator);
}
}
文件对象创建(四种)
- 创建File类对象时,文件路径可以不存在,可以以文件夹或文件结尾
import java.io.File;
public class Demo02File {
/**
* 创建File类对象时:
* 文件路径可以不存在
* 可以以文件夹或文件结尾
*
* */
public static void demo01() {
File file = new File("D:\\d\\a.txt");
System.out.println(file);
}
public static void demo02(String parent, String child) {
File file = new File(parent, child);
System.out.println(file);
}
public static void demo03() {
File parent = new File("D:\\");
File file = new File(parent, "a.txt");
System.out.println(file);
}
public static void main(String[] args) {
demo01();
demo02("C:\\", "c.txt");
demo03();
}
}
文件路径获取(俩种)
import java.io.File;
public class Demo03FilePath {
public static void main(String[] args) {
demo01();
demo02();
demo03();
demo04();
}
/**
* 无论传入参数时绝对路径还是相对路径,都返回绝对路径
* */
public static void demo01() {
File file = new File("D:\\shiyan\\a.txt");
String path = file.getAbsolutePath();
System.out.println(path);
File file1 = new File("a.txt");
String path2 = file1.getAbsolutePath();
System.out.println(path2);
}
/**
* 此方法获取构造方法中传递的路径
* */
public static void demo02() {
File file = new File("D:\\shiyan\\a.txt");
String path = file.getPath();
System.out.println(path);
File file1 = new File("a.txt");
String path2 = file1.getPath();
System.out.println(path2);
}
/**
* 获取构造方法传递路径的结尾部分(文件/文件夹)
* */
public static void demo03() {
File file = new File("D:\\shiyan\\a.txt");
String name = file.getName();
System.out.println(name);
File file1 = new File("D:\\shiyan");
String name2 = file1.getName();
System.out.println(name2);
}
/**
* 获取构造方法所表示的文件大小(以字节为单位)
* 注意:文件夹没有大小,不能获取
* 若构造方法中给出的路径不存在,返回0
* */
public static void demo04() {
File file = new File("D:\\shiyan\\a.txt");
long l1 = file.length();
System.out.println(l1);
File file1 = new File("D:\\shiyan");
long l2 = file1.length();
System.out.println(l2);
}
}
文件及文件夹的创建
import java.io.File;
public class Dmeo04FileOperation {
//判断File对象是否以文件或是文件夹结尾
//判断File对象是否已文件夹结尾
//public boolean isDirectory();
//判断File对象是否以文件结尾
//public boolean isFile();
//创建一个新的文件
//public boolean createNewFile();
//删除改文件
//public boolean delete();
//判断文件是否存在
//public boolean isExists();
/**
* 创建单级文件夹
* public boolean mkdir();
* 既可以创建单级文件夹又可以创建多级文件夹
* public boolaen mkdirs();
* 注意:以上都是创建文件夹,返回值都是表示文件是否创建成功,不能创建文件
* */
public static void show() {
File file = new File("D:\\aaa");
boolean flag = file.mkdir();
System.out.println(flag);
File file1 = new File("D:\\ccc\\ddd");
boolean flag1 = file1.mkdir();
boolean flag2 = file1.mkdirs();
System.out.println(flag1);
System.out.println(flag2);
}
public static void main(String[] args) {
show();
}
}
文件夹中所有文件的遍历
import java.io.File;
public class Dmeo05FileTravesal {
/**
* 文件遍历
* list方法和listFiles方法遍历的是构造方法中给出的目录
* 构造方法中给出的目录不存在或不是目录则抛出空指针异常
* */
/**
* public String[] list(); 返回一个字符串数组,表示File目录中所有的子文件或目录
* 也可以获取隐藏文件,返回每个文件或问价夹名称
* */
public static void show() {
File file = new File("D:\\tools");
String[] arr = file.list();
for (String e : arr) {
System.out.println(e);
}
}
/**
* public File[] listFiles(); 返回一个File数组,表示File目录中所有的子文件或目录
* 返回数组中每个元素的绝对路径
*/
public static void showe() {
File file = new File("D:\\tools");
File[] arr = file.listFiles();
for (File f : arr) {
System.out.println(f);
}
}
/**
* 递归遍历一个文件夹中所有的文件以及文件夹
*/
public static void getDirectoy(File dir) {
//打印被遍历的目录名称
System.out.println(dir);
//获取当前文件夹下的文件以及文件夹
File[] files = dir.listFiles();
//遍历File数组
for (File f : files) {
//判断是文件还是文件夹
if (f.isDirectory()) {
getDirectoy(f);
} else {
System.out.println(f);
}
}
}
/**
* 遍历文件夹下的所有文件及文件夹,获取特定类型文件
* */
public static void getDirectoy2(File dir) {
//打印被遍历的目录名称
System.out.println(dir);
//获取当前文件夹下的文件以及文件夹
File[] files = dir.listFiles();
//遍历File数组
for (File f : files) {
//判断是文件还是文件夹
if (f.isDirectory()) {
getDirectoy(f);
} else {
/**
* String name = f.getName();
* String path = f.getPath();
*/
String s = f.toString();
boolean flag = s.endsWith(".java");
if (flag) {
System.out.println(f);
}
}
}
}
public static void main(String[] args) {
show();
showe();
File file = new File("D:\\tools");
getDirectoy(file);
getDirectoy2(file);
}
}
文件过滤器
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
public class Demo06FileFilter {
/**
* 文件过滤器
* File类中有俩个重载lisTfiles的方法,方法的参数传递的就是过滤器
* File[] listFies(FileFilter fileFilter); 用来过滤文件File对象
* File[] listFile(FileNameFilter fileNameFilter); 用来过滤文件名称
*
* 注意:俩个过滤器方法没有实现类,使用时需要重写实现类
*/
/**
* 使用过滤器过滤.java结尾的文件
* */
public static void getDirectoy2(File dir) {
//打印被遍历的目录名称
//使用匿名内部类创建
// File[] files = dir.listFiles(new FileFilter() {
// @Override
// public boolean accept(File file) {
// //当为文件夹时或是.java文件返回true
// return file.isDirectory() || file.toString().toLowerCase().endsWith(".java");
// }
// });
//最简化lamda表达式
// File[] files = dir.listFiles(file -> file.isDirectory() || file.toString().toLowerCase().endsWith(".java"));
//使用FileNameFilter过滤器
// File[] files = dir.listFiles(new FilenameFilter() {
// @Override
// public boolean accept(File file, String s) {
// return new File(file, s).isDirectory() || s.toLowerCase().endsWith(".java");
// }
// });
//使用lamda表达式,条件:接口中只有一个抽象方法
// File[] files = dir.listFiles((file, s) -> {
// return new File(file, s).isDirectory() || s.toLowerCase().endsWith(".java");
// }
// );
//方法中只有一行代码,可以这样简化
File[] files = dir.listFiles((file, s) -> new File(file, s).isDirectory() || s.toLowerCase().endsWith(".java"));
//遍历File数组
for (File f : files) {
//判断是文件还是文件夹
if (f.isDirectory()) {
getDirectoy2(f);
} else {
System.out.println(f);
}
}
}
public static void main(String[] args) {
File file = new File("D:\\tools");
getDirectoy2(file);
}
}
常用方法
递归
直接递归
- 方法自己调用自己
间接递归
- A方法调用B方法,B方法调用C方法,C方法调用调用A方法
注意事项
- 递归要有递归出口,且构造方法不可以递归
- 递归次数不能太多,否则会导致栈内存溢出