File类
文件和目录路径名的抽象表示形式。
File类可以干些什么呢?
- 可以操作文件
- 可以操作文件夹
- 可以操作文件的路径
常用方法 和 构造方法 代码解析:
public class Demo01 {
public static void main(String[] args) throws IOException {
// fun1();
// fun2();
// fun3();
// fun4();
// fun5();
// fun6();
// fun7();
// 遍历打印Test所有文件和文件夹
File file = new File("/Users/james/Desktop/Test");
printDiv(file);
}
public static void printDiv(File file) {
File[] listFiles = file.listFiles();
for (File file2 : listFiles) {
if (file2.isFile()) {
System.out.println(file2.getName());
}else {
printDiv(file2);
}
}
}
/**
*
*/
public static void fun7() {
File file = new File("/Users/james/Desktop/Test");
String[] list = file.list();
// 路径下的所有文件及文件夹的名字(一层 以字符串形式)
for (String string : list) {
System.out.println(string);
}
System.out.println("----------------------------");
File[] listFiles = file.listFiles();
// 获取的是该文件下 文件的全路径 以文件对象形式
for (File file2 : listFiles) {
System.out.println(file2);
}
}
/**
*
*/
public static void fun6() {
// 和toString 方法一样 输出路径 不管文件存在与否
File file = new File("/Users/james/Desktop/Test");
String path = file.getPath();
System.out.println(path);
// 获取文件名字
String name = file.getName();
System.out.println(name);
// 获取文件大小(获取文件占多少字节)
// 英文 一个字节 中午 三个字节
long length = file.length();
System.out.println(length);
// 获取父级路径
File parentFile = file.getParentFile();
System.out.println(parentFile);
}
/**
*
*/
public static void fun5() {
// 判断文件是否存在
File file = new File("/Users/james/Desktop/Test/f");
boolean directory = file.isDirectory();
boolean file2 = file.isFile();
System.out.println(directory);
System.out.println(file2);
}
/**
*
*/
public static void fun4() {
// 删除
// 删除需谨慎 不走回收站
File file = new File("/Users/james/Desktop/Test/g");
boolean delete = file.delete();
// 如果文件夹下没有子文件夹 才可以删除
System.out.println(delete);
}
/**
* @throws IOException
*/
public static void fun3() throws IOException {
// 创建文件方法
// 该方法只能创建文件 不给后缀也是创建的文件
File file = new File("/Users/james/Desktop/Test/HelloWord.txt");
boolean createNewFile = file.createNewFile();
// 文件已经存在不会在创建
System.out.println(createNewFile);
File file1 = new File("src/dp.txt");
boolean createNewFile2 = file1.createNewFile();
System.out.println(createNewFile2);
// 创建文件夹
// 带不动后缀创建出来的都是文件夹
// mkdir()只能创建一级的文件夹 mkdirs() 可以创建多级的
File file2 = new File("/Users/james/Desktop/Test/g");
boolean mkdir = file2.mkdirs();
System.out.println(mkdir);
}
/**
*
*/
public static void fun2() {
// 构造方法
/*
* 绝对路径
* 硬盘上的路径 并且 这个路径是唯一的
* 相对路径
* 相对路径是有参照物的
*
*/
File file = new File("/Users/james/Desktop/Test");
System.out.println(file.getAbsolutePath());
// 判断改路径是否存在
boolean exists = file.exists();
System.out.println(exists);
// 使用相对路径 参照物 当前工程跟目录
File file1 = new File("src/wl.txt");
boolean exists1 = file.exists();
System.out.println(exists1);
System.out.println(file1.getAbsolutePath());
String parent = "/Users/james/Desktop";
String child ="Test";
// 使用构造方法二
File file2 = new File(parent, child);
boolean exists2 = file.exists();
System.out.println(exists2);
// 使用构造方法三
File F = new File(parent);
File file3 = new File(F, child);
boolean exists3 = file.exists();
System.out.println(exists3);
}
/**
*
*/
public static void fun1() {
// File 类的静态成员变量
// 不同平台下获取的路径分隔符不同
// MAC 系统下 路径分隔符:(冒号)
// win下 是分号
String pathseparator = File.pathSeparator;
System.out.println(pathseparator);
// 分隔符
// MAC系统 /
// win系统 \
String separator = File.separator;
System.out.println(separator);
}
}
例题练习:
//2.从控制台输入一个字符串 该字符串是文件夹路径 计算这个文件夹的大小
//3.从控制台输入一个字符串 该字符串是文件夹路径 删除这个文件夹
public class Demo01 {
public static void main(String[] args) {
//File dirFile = getDirFile();
//deletDir(dirFile);
}
// 输入路径判断是否是文件夹路径 是就返回 不是就重新输入
public static File getDirFile() {
Scanner scanner = new Scanner(System.in);
// 判断
while (true) {
System.out.println("请输入一个文件夹的路径");
String path = scanner.nextLine();
// 利用传进了的路径创建文件对象来判断
File file = new File(path);
if (!file.exists()) {
System.out.println("输入路径不存在,请重新输入");
}else if (file.isFile()) {
System.out.println("你输入的是文件,请重新输入");
}else {
return file;
}
}
}
// 计算文件夹大小
public static long getDirLengthByFile(File file) {
long sum = 0;
// 遍历文件夹
File[] listFiles = file.listFiles();
for (File subFile : listFiles) {
// 是文件就直接计算 不是文件就继续遍历
if (subFile.isFile()) {
sum += subFile.length();
}else {
sum += getDirLengthByFile(subFile);
}
}
return sum;
}
// 根据文件夹路径删除文件夹
public static void deletDir(File file) {
File[] listFiles = file.listFiles();
for (File subFile : listFiles) {
if (subFile.isFile()) {
subFile.delete();
}else {
// 是文件夹 继续遍历
deletDir(subFile);
}
}
// 传入文件夹里面的文件及文件夹 在上面全部删除了 这时传进来的文件夹已经空了
// 可以直接删除
file.delete();
}
}
// 通过过滤器 遍历文件夹 打印出小于200K的文件
public class Demo04 {
public static void getTxTFiled(File file){
File[] listFiles = file.listFiles(new MyFileNameFilter());
for (File file2 : listFiles) {
if (file2.isFile()) {
System.out.println(file2.getName());
}else {
getTxTFiled(file2);
}
}
}
public static void main(String[] args) {
File file = new File("/Users/james/Desktop/个人文件");
// 使用重载listFile 方法
getTxTFiled(file);
}
}
class MyFileNameFilter implements FilenameFilter{
//通过FilenameFilter过滤器获取指定目录中小于200K的小文件
@Override
public boolean accept(File dir, String name) {
// 参数1. 是传进了的文件夹跟路径
// 参数2. 该路径下的文件名字和文件夹的名字
// 利用这两个参数创建一个文件对象
File file = new File(dir, name);
// 过滤隐藏文件
if (file.isHidden()) {
return false;
}
if (file.isDirectory()) {
return true;
}
return file.length() > 204800;
}
}