File类与异常机制学习总结

1.File
File,是文件和目录路径名的抽象表示
File只关注文件本身的信息,而不能操作文件里面的内容
文件大小,文件名,文件类型,文件修改时间等
1.2.File类的方法
import java.io.File;import java.text.SimpleDateFormat;import java.util.Date;/** * @author 作者 张迁: * @version 创建时间:2019年8月1日 上午9:54:39 * 类说明 * File类:只关注文件的基本信息,与读写内容操作无关* * 绝对路径:显示完整路径* 相对路径:不会将路径补全*/public class FileTest {public static void main(String[] args) {//实例化指定路径下的File的对象//File file = new File("d:/a.txt");File file = new File("a.txt");System.out.println(file);System.out.println("绝对路径:"+file.getAbsolutePath());System.out.println("相对路径:"+file.getPath());System.out.println("获取文件名:"+file.getName());System.out.println("获取父路径:"+file.getAbsoluteFile().getParent());System.out.println("是否可写:"+file.canWrite());System.out.println("是否可读:"+file.canRead());System.out.println("是否隐藏:"+file.isHidden());System.out.println("获取长度:"+file.length());System.out.println("是否为文件:"+file.isFile());System.out.println("是否为目录:"+file.isDirectory());System.out.println("最后修改时间:"+file.lastModified());//按格式打印时间: //方式1: long-->Date-->SimpleDateFormat-->StringDate date = new Date(file.lastModified());//System.out.println(date);//Date-->SimpleDateFormat-->StringSimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println(sdf.format(date)); //方式2:long-->Long-->SimpleDateFormat-->StringSystem.out.println(sdf.format(file.lastModified()));}
1.3.通过程序,判断指定路径的文件是否存在,如果不存在,则创建该文件
下面按各种情况来解决该问题
()方法包含mkdir()方法(查方法源码)
import java.io.File;import java.io.IOException;/** * @author 作者 张迁: * @version 创建时间:2019年8月1日 上午10:36:48 * 类说明 */public class MkdirTest {public static void main(String[] args) throws IOException {File file = new File("a/a.txt");//创建目录File parent = file.getAbsoluteFile().getParentFile();if(!parent.exists()){if(parent.mkdirs())System.out.println("创建目录成功!");}//创建文件if(!file.exists()){if(file.createNewFile())System.out.println("创建文件成功!");}}}
1.4.输出指定目录下的所有文件信息,比如打印当前项目根目录下的文件后缀名为txt的文件
import java.io.File;import java.io.FileFilter;import java.util.Arrays;/** * @author 作者 张迁: * @version 创建时间:2019年8月1日 上午10:59:50 * 类说明 */public class ListFileTest {public static void main(String[] args) {File file = new File("a");/*String[] s = file.list();System.out.println(Arrays.toString(s));//判断后缀名为txt的文件File[] lFiles = file.listFiles();for(File f:lFiles){if(f.getName().endsWith("txt")&&f.isFile())System.out.println(f);}*/File[] fs = file.listFiles(new FileFilter() {@Overridepublic boolean accept(File pathname) {if(pathname.getName().endsWith("txt")&&pathname.isFile())return true;return false;}});System.out.println(Arrays.toString(fs));}}
2.递归
1)递归的定义,方法里面调用方法自身
2)递归一定要有出口,否则会造成无限递归,导致内存溢出(Error)
3)递归的次数不能太多,否则同样也会出现内存溢出
4)要找到规律,使程序的运行不断接近出口
定义一个方法
规律----》出口
递归实现多级目录的删除
import java.io.File;/** * @author 作者 张迁: * @version 创建时间:2019年8月1日 下午7:51:59 * 类说明 */public class MultiDelTest {static File file1 = new File("a");public static void main(String[] args) {del(file1);}private static void del(File file) {if(file.isFile()){file.delete();}else if(file.isDirectory()){File[] fs = file.listFiles();if(fs.length==0){file.delete();//删除空目录while (file1.exists()) {del(file.getParentFile());}}else{for(File f:fs){if(f.isFile()){f.delete();}else if(f.isDirectory()){del(f);}}}}}}