java-io-File类

File类

文件的本质: 本质就是 文件或者文件夹路径的 抽象表现形式, 就是文件指针

 重点: 凡是对文件的操作,必须先创建文件指针指向你需要操作的文件

静态成员变量
static String separator   名称分隔符
static String pathSeparator  路径分隔符
构造方法
public File(String pathname)  pathname文件路径名
public File(String parent,String child) 父路径名 子路径名
public File(File parent,String child)  通过父文件对象和子文件名称构造文件对象
public class FileDemo02 {
	public static void main(String[] args) throws IOException {
		File f = new File("D:\\JavaSE\\02_JavaSE");//创建文件指针(f)指向你需要操作的文件("D:\\JavaSE\\02_JavaSE") 该文件可以为null(也就是可以创建该文件夹没有的路径)
		File f2 = new File("D:\\JavaSE\\02_JavaSE\\a.txt");
		System.out.println(File.separator); // \
		System.out.println(File.pathSeparator); // ;
		
		File f3 = new File("D:\\JavaSE\\02_JavaSE\\day16\\01_课件资料");
		System.out.println(f3);
		File f4 = new File("D:\\JavaSE","02_JavaSE");
		System.out.println(f4);
		File f5 = new File(new File("D:\\JavaSE"),"02_JavaSE");
		System.out.println(f5);
		
		File f6 = new File("test.txt");//没有指定路径的都默认为该工程的路径
		// D:\JavaSE\CodeLibrary\day0820_filedemo\test.txt
		System.out.println(f6.getAbsolutePath());
		System.out.println(f6.createNewFile());
		
		File f7 = new File("src/com/sxt/filedemo/FileDemo01.java");
		System.out.println(f7.getAbsolutePath());
		
	}
}
文件的操作
	基本操作
		File的创建
		File的删除
		File的重命名
		File的遍历
	批量操作 [递归]
		批量File的创建
		批量File的删除
		批量File的重命名
		批量File的遍历

  重点: 
  	1.凡是对文件的操作,必须先创建文件指针指向你需要操作的文件
  	2.文件的创建之前,指针所指向的位置所对应的父目录一定要存在,否则会抛出 IOException
  文件的创建
  public boolean createNewFile()  若文件不存在则创建新文件
 		1.表示创建文件,不能够创建文件夹
 		2.如果文件存在,创建失败
 		3.该方法会抛出一个编译时异常 IOException
	public boolean mkdir()  创建目录 make Directory
 		1.表示创建文件夹
 		2.如果文件存在,创建失败
 		3.该方法不会抛出异常,操作失败,返回false
 	public boolean mkdirs()  创建目录及不存在的父目录
 		1.创建连续的文件夹
 		2.如果文件存在,创建失败
 		3.该方法不会抛出异常,操作失败,返回false
public class FileDemo03 {
	public static void main(String[] args) throws IOException {
		// File的创建
		// 在工程目录下创建文件 a.txt
		File f = new File("a.txt");
		System.out.println("createNewFile: " + f.createNewFile());//该方法会抛出一个编译时异常 IOException
		
		// 在工程目录下创建文件夹 aaa
		File f2 = new File("aaa");
		System.out.println("createNewFile: " + f2.mkdir());//该方法不会抛出异常,操作失败,返回false
		
		// 创建 aaa 下面 bbb 下面 ccc 下面 a.txt
		/*File f3 = new File("aaa/bbb/ccc/a.txt");//文件的创建之前,
		  指针所指向的位置所对应的父目录一定要存在,否则会抛出 IOException(就是说要先有aaa然后有bbb然后有ccc最后才到a.txt)
		System.out.println("createNewFile: " + f3.createNewFile());*/
		
		File f4 = new File("aaa");
		File f5 = new File("aaa/bbb");
		File f6 = new File("aaa/bbb/ccc");
		File f7 = new File("aaa/bbb/ccc/a.txt");
		System.out.println(f4.mkdir());
		System.out.println(f5.mkdir());
		System.out.println(f6.mkdir());
		System.out.println(f7.createNewFile());
		
		// 需求: 创建 xxx/yyy/zzz/ooo/ppp/qqqq/a.txt
		File f8 = new File("xxx/yyy/zzz/ooo/ppp/qqqq");
		File f9 = new File(f8, "a.txt");
		System.out.println(f8.mkdirs());
		System.out.println(f9.createNewFile());
	}
}
文件的删除
public boolean delete()  删除文件及空目录
注意: 删除带内容的文件夹需要递归删除,
但是递归删除之前需要先遍历文件夹中所有的文件和文件夹,批量删除,这属于批量操作
public class FileDemo02 {
	public static void main(String[] args) {
		File f = new File("test.txt");
		System.out.println(f.delete());
		
		// 删除 test
		System.out.println(new File("test").delete());
		
		// 删除 aaa
		System.out.println(new File("aaa").delete());// 
	}
}
文件的重命名
public boolean renameTo(File dest)  重命名为dest

注意:
	如果 源文件和 目标文件父目录一致,就是直接 更名
	如果 源文件和 目标文件父目录不一致,就是 剪切 + 更名
public class FileDemo02 {
	public static void main(String[] args) {
		// 需求: 将a.txt改成b.txt
		File f = new File("a.txt");
		System.out.println(f.renameTo(new File("b.txt")));
		
		File f2 = new File("aaa/bbb/ccc/a.txt");
		System.out.println(f2.renameTo(new File("c.txt")));//
	}
}

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

文件的相关属性功能
public boolean isFile()  是否文件
public boolean isDirectory()  是否目录
public boolean canRead()  是否可读
public boolean canWrite()  是否可写
public boolean exists()  是否存在
public boolean isHidden()  是否隐藏
public long length()  长度
public String getAbsolutePath()  绝对路径
public String getPath()  定义的路径
public String getName()  file名字
public long lastModified()  最后一次修改时间
public class FileDemo02 {
	public static void main(String[] args) {
		File f = new File("b.txt");
		System.out.println("isFile: " + f.isFile()); // true
		System.out.println("isDirectory: " + f.isDirectory()); // false
		System.out.println("canRead: " + f.canRead()); // true
		System.out.println("canWrite: " + f.canWrite()); // true
		System.out.println("exists: " + f.exists()); // true
		System.out.println("isHidden: " + f.isHidden()); // false
		System.out.println("length: " + f.length()); // 15
		System.out.println("getAbsolutePath: " + f.getAbsolutePath()); // D:\JavaSE\CodeLibrary\day0820_filedemo\b.txt
		System.out.println("getPath: " + f.getPath()); // b.txt
		System.out.println("getName: " + f.getName()); // b.txt
		System.out.println("lastModified: " + f.lastModified()); // 11 21 1566271312629
		Date d = new Date(1566271312629L);
		String s = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(d);
		System.out.println(s);
	}
}
文件的遍历
public String[] list()  返回file下的文件和目录名称(字符串)
public File[] listFiles()  返回file下的文件和目录(文件)
public String[] list(FilenameFilter filter)  根据filter过滤返回file下文件和目录名称
public  File[] listFiles(FileFilter filter)  根据filter过滤返回file下文件和目录
public class FileDemo02 {
	public static void main(String[] args) {
		// 需求: 遍历com.sxt.filedemo目录下的所有文件
		File f = new File("src/com/sxt/filedemo");
		String[] fileNames = f.list();
		for (String fileName : fileNames) {
			System.out.println(fileName);
		}
		
		System.out.println("===================");
		File[] files = f.listFiles();
		for (File file : files) {
			System.out.println(file.getName() + "|" + file.getAbsolutePath());
		}
		
		System.out.println("===================");
		// public String[] list(FilenameFilter filter) 
		fileNames = f.list(new FilenameFilter() {//匿名内部类
			
			@Override
			public boolean accept(File dir, String name) {
				File f = new File(dir, name);
				return f.isFile() && name.endsWith(".txt");
			}
		});
		
		System.out.println(Arrays.toString(fileNames));
		
		System.out.println("===================");
		files = f.listFiles(new FileFilter() {
			
			@Override
			public boolean accept(File f) {
				return f.isFile() && f.getName().endsWith(".txt");
			}
		});
		for (File file : files) {
			System.out.println(file + "|" + file.getAbsolutePath());
		}
		
		/*
		 * 接口回调
		 * 	FileFilter filter = new FileFilter() {
			
				@Override
				public boolean accept(File f) {
					return f.isFile() && f.getName().endsWith(".txt");
				}
			};
			
			public File[] listFiles(FileFilter filter) {
		        String ss[] = f.list(); 
		        [a.txt, b.txt, c.txt, d.txt, FileDemo01.java, FileDemo02.java, FileDemo03.java, FileDemo04.java, FileDemo05.java, FileDemo06.java]
		        if (ss == null) return null;
		        ArrayList<File> files = new ArrayList<>();
		        for (String s : ss) {
		            File f = new File(s, this);
		            if ((filter == null) || filter.accept(f))
		                files.add(f);
		        }
		        return files.toArray(new File[files.size()]);
		    }
	
		 */
	}
}

练习案例

/*
 * 1、判断D盘目录下是否有后缀名为.java的文件,如果有,统计该类型文件的个数并输出此文件名称
 */
public class FileDemo07 {
	public static void main(String[] args) {
		System.out.println("Java文件的个数是: "  + getJavaFileCount(new File("src/com/sxt/filedemo"), "java"));
		System.out.println("Java文件的个数是: "  + getJavaFileCount(new File("src/com/sxt/filedemo"), "txt"));
		System.out.println("Java文件的个数是: "  + getJavaFileCountByFilter(new File("src/com/sxt/filedemo"), "txt"));
	}
	
	/*
	 * 统计Java文件的个数
	 * 返回值类型: int
	 * 参数列表: File srcFile
	 * 方法名: getJavaFileCount
	 */
	public static int getJavaFileCount(File srcFile, String suffix) {
		int count = 0;
		
		File[] files = srcFile.listFiles();
		
		if (files == null) {
			throw new NullPointerException();
		}
		
		if (files.length != 0) {
			for (File f : files) {
				String name = f.getName();
				if (f.isFile() && name.endsWith(".".concat(suffix))) {
					count ++;
					System.out.println(name);
				}
			}
		}
		
		return count;
	}
	
	public static int getJavaFileCountByFilter(File srcFile, String suffix) {
		File[] files = srcFile.listFiles(new FileFilter() {
			
			@Override
			public boolean accept(File f) {
				return f.isFile() && f.getName().endsWith(".".concat(suffix));
			}
		});
		
		if (files == null) {
			throw new NullPointerException();
		}
		
		return files.length;
	}
}
批量操作 批量查询
  	需求: 把D:\JavaSE\CodeLibrary文件夹下的所有的 class 结尾的文件输出在控制台
  
  	思路:
  	1.封装文件路径指向 D:\JavaSE\CodeLibrary
   	2.获取到目录下所有的文件或者文件夹
   	3.遍历每一个文件 或者 文件夹
   	4.判断该 File 是 文件还是文件夹 (if-else)
   		是文件
   			判断改文件是否以 .class 结尾 (单if)
   				是
   					输出改文件
   				不是
   					不处理
   		是文件夹
   			重复 第二步
public class BatchFileDemo01 {
	public static void main(String[] args) {
		// 1.封装文件路径指向 D:\JavaSE\CodeLibrary
		File srcFolder = new File("D:\\JavaSE\\CodeLibrary");
		getAllClassFile(srcFolder);
	}
	
	public static void getAllClassFile(File srcFolder) {
		if (srcFolder == null) {
			throw new NullPointerException("兄弟,你传的啥文件啊!!!");
		}
		// 2.获取到目录下所有的文件或者文件夹
		File[] files = srcFolder.listFiles();
		if (files != null && files.length != 0) {
			// 3.遍历每一个文件 或者 文件夹
			for (File f : files) {
				String fileName = f.getName();
				// 4.判断该 File 是 文件还是文件夹 (if-else)
				if (f.isDirectory()) {
					// 重复 第二步
					getAllClassFile(f);
				} else {
					// 是文件 
					// 判断改文件是否以 .class 结尾 (单if)
					if (fileName.endsWith(".class")) {
						System.out.println(fileName);
					}
				}
			}
		}
		
	}
}
递归删除指定目录下的所有文件
  注意: 通过命令和代码删除文件是不走回收站的!!!

思路:
1.封装文件路径指向 D:\a.txt\CodeLibrary
2.获取到目录下所有的文件或者文件夹
3.遍历每一个文件 或者 文件夹
4.判断该 File 是 文件还是文件夹 (if-else)
	是文件
		删除文件
 	是文件夹
		重复 第二步

注意: 如果文件夹中的所有文件都删除了,还记住删除空目录
public class BatchFileDemo02 {
	public static void main(String[] args) {
		File srcFile = new File("D:\\a.txt\\CodeLibrary");
		deleteFolder(srcFile);
	}
	
	public static void deleteFolder(File srcFolder) {
		if (srcFolder == null) {
			throw new NullPointerException("兄弟,你传的啥文件啊!!!");
		}
		// 2.获取到目录下所有的文件或者文件夹
		File[] files = srcFolder.listFiles();
		if (files != null && files.length != 0) {
			// 3.遍历每一个文件 或者 文件夹
			for (File f : files) {
				String fileName = f.getName();
				// 4.判断该 File 是 文件还是文件夹 (if-else)
				if (f.isDirectory()) {
					// 重复 第二步
					deleteFolder(f);
				} else {
					// 是文件 
					// 删除即可
					System.out.println("\t\t" + (f.delete() ? "成功" : "失败") + "删除了" + fileName + "文件!!!");
				}
			}
		}
		System.out.println(srcFolder.delete() ? "成功" : "失败" + "删除了" + srcFolder.getName() + "文件夹!!!");
	}
}
/*
 * 统计视频文件的个数
 */
public class BatchFileDemo03 {
	public static void main(String[] args) {
		
	}
	
	public static int getAllMP4File(File srcFolder, int count) {
		if (srcFolder == null) {
			throw new NullPointerException("兄弟,你传的啥文件啊!!!");
		}
		// 2.获取到目录下所有的文件或者文件夹
		File[] files = srcFolder.listFiles();
		if (files != null && files.length != 0) {
			// 3.遍历每一个文件 或者 文件夹
			for (File f : files) {
				String fileName = f.getName();
				// 4.判断该 File 是 文件还是文件夹 (if-else)
				if (f.isDirectory()) {
					// 重复 第二步
					getAllMP4File(f,count);
				} else {
					// 是文件 
					// 判断改文件是否以 .class 结尾 (单if)
					if (fileName.endsWith(".java")) {
						count ++;
						return count;
					}
				}
			}
		}
		return count;
		
	}
	
}
/*
 * 统计某个文件夹下面MP4文件的个数
 */
public class BatchFileDemo04 {
	
	static int count = 0;
	
	public static void main(String[] args) {
		// 1.创建文件路径对象指向 D:\JavaSE_0720\CodeLibrary src文件
		File srcFile = new File("D:\\JavaSE");
		System.out.println("视频的个数:" + getAllJavaFile(srcFile));
	}
	
	public static int getAllJavaFile(File srcFile) throws NullPointerException{
		if (srcFile == null) {
			throw new NullPointerException("源文件不能为null");
		}
		
		// 2.获取到文件目录下面所有的文件或者文件夹
		File[] files = srcFile.listFiles();
		if (files != null && files.length != 0) {
			// 3.遍历这个文件或者文件夹目录,获取到每一个文件或者文件夹
			for (File f : files) {
				// 4.判断该东西是文件还是文件夹(if-else 语句)
				if (f.isDirectory()) {
					getAllJavaFile(f);
				} else {
					String fileName = f.getName();
					// 是文件 判断该文件是否是Java文件 (单if语句)
					if (fileName.endsWith(".mp4")) {
						System.out.println(fileName);
						count++;
					}
				}
			}
		}
		
		return count;
	}
}
	// 2.获取到文件目录下面所有的文件或者文件夹
	File[] files = srcFile.listFiles();
	if (files != null && files.length != 0) {
		// 3.遍历这个文件或者文件夹目录,获取到每一个文件或者文件夹
		for (File f : files) {
			// 4.判断该东西是文件还是文件夹(if-else 语句)
			if (f.isDirectory()) {
				getAllJavaFile(f);
			} else {
				String fileName = f.getName();
				// 是文件 判断该文件是否是Java文件 (单if语句)
				if (fileName.endsWith(".mp4")) {
					System.out.println(fileName);
					count++;
				}
			}
		}
	}
	
	return count;
}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值