File类、递归
File类、递归
1.1File类概述
java.io.File表示文件和目录路径名的抽象类。可以对文件和文件夹进行创建删除、获取、判断、遍历等功能。
1.2路径\文件分割符,相对路径绝度路径
1.2.1路径\文件分割符
* 在编程的过程中,最好不要写死
* windows: 文件分隔符\(编程中要用转义字符"\\") 路径分隔符;
* linux: 文件分隔符/ 路径分隔符:
public static void main(String[] args) { //源码中:public static final String separator = "" + separatorChar; //文件分隔符 String separator = File.separator; System.out.println("separator = " + separator); //源码中:public static final String pathSeparator = "" + pathSeparatorChar; //路径分隔符 String pathSeparator = File.pathSeparator; System.out.println("pathSeparator = " + pathSeparator); //执行结果: //separator = \ //pathSeparator = ; }
1.2.1绝对路径和相对路径
* 绝度路径:从盘符开始的路径,是完成的路径。
*
* 相对路径:化简的路径,以当前项目根目录作为参考,开发中经常使用
* D:\JavaSE\demo02File.txt D:\JavaSE\项目根目录 demo02File.txt相对路径
*
* windows下:文件和目录路径是不区分大小写!!!
/** * 路径知识点 */ private static void show01() { File file = new File("demo02File.txt"); System.out.println(file.getAbsoluteFile()); File file02 = new File("D:\\demo02File.txt"); System.out.println(file02.getAbsoluteFile()); //结果: // D:\JavaSE\demo02File.txt //D:\demo02File.txt }
1.3File类的构造方法
* java.io.File类是文件和目录路径的抽象表示,可以对文件和目录路径进行
* 获取、判断、创建删除、遍历等操作
*
* File对象表示硬盘上真是存在的一个文件或者目录路径名!!!
* 该目录下是否存在文件或者文件夹,不影响File对象的创建!!!
*
* 构造方法:
* 构造方法一:通过文件或目录路径名字符串创建File对象
* public File(String pathname);
* String pathname:字符串的路径名称
* 路径可以是以文件结尾/文件夹结尾,相对路径/绝对路径,存在/不存在
*
* 创建File对象,只是把字符串路径封装为File对象,不考虑路径的真假情况!!!
*
* 构造方法二:通过父路径名 和 子路径名 创建File对象
* public File(String parent,String child);
*
* 构造方法三:通过抽象父路径和子路径名创建创建File对象
* public File(File parent, String child);
/** * 构造方法 */ private static void show02() { //构造方法一:通过文件或目录路径名字符串创建File对象 File file = new File("demo03File.txt"); System.out.println(file); //构造方法二:通过父路径名 和 子路径名 创建File对象 File file02 = new File("D:\\b","demo03File02.txt"); System.out.println(file02); //D:\\bbb是不存在的文件夹,但是不影响File对象的创建。 File file03 = new File("D:\\bbb","demo03File02.txt"); System.out.println(file03); //构造方法三:通过抽象父路径和子路径名创建创建File对象 File parentPath = new File("D:\\"); File file04 = new File(parentPath, "demo04File02.txt2"); System.out.println(file04); }
1.4File类的获取功能
* File类的获取功能
*
* public String getAbsolutePath();
*
* public String getPath();
* File类重写了toString(),源码如下:
* public String toString() {
* return getPath();
* }
*
* public String getName();
*
* public long length();
* 获取文件的字节长度,文件夹是没有长度的,返回的0!!
public static void main(String[] args) { File file = new File("D:\\JavaSE\\demo04File.txt"); //获取文件或目录路径名的绝对路径 File absoluteFile = file.getAbsoluteFile(); System.out.println("absoluteFile = " + absoluteFile); //获取构造方法中参数对应的字符串 String path = file.getPath(); System.out.println("path = " + path); System.out.println("file = " + file); //获取路径结尾的文件名或者文件夹 String name = file.getName(); System.out.println("name = " + name); //获取文件的字节长度,文件夹是没有长度的,返回的0!!! long length = file.length(); System.out.println("length = " + length); // result: // absoluteFile = D:\JavaSE\demo04File.txt // path = D:\JavaSE\demo04File.txt // file = D:\JavaSE\demo04File.txt File类重写了toString方法,里面调用了getPath()!!! // name = demo04File.txt // length = 12 utf-8中一个汉字三个字节!!! }
1.5File类的判断功能
* File类的判断功能:
*
* public boolean isExists(); File对象表示的文件或者文件夹是否存在
* public boolean isFile(); File对象是文件吗
* public boolean isDirectory(); File对象是文件夹吗
*
* windows中只有文件和文件夹,isFile和sDirectory互斥!!!
* 前提是先判断file是否存在,才有必要在判断是文件还是文件夹!!!
File file = new File("demo04File.txt"); //windows中只有文件和文件夹,isFile和sDirectory互斥 //前提是先判断file是否存在,才有必要在判断是文件还是文件夹 if (file.exists()){ System.out.println(file.getName()+"(file or not):"+file.isFile()); System.out.println(file.getName()+"(directory or not):"+file.isDirectory()); } File file02 = new File("D:\\JavaSE"); if (file02.exists()){ System.out.println(file02.getName()+"(file or not):"+file02.isFile()); System.out.println(file02.getName()+"(directory or not):"+file02.isDirectory()); }
1.6File类的创建删除功能
* File对象的创建和删除功能:
* public boolean createNewFile();
* 只能创建文件,并且当且仅当文件不存在的时候,创建一个新的文件,返回true,否则返回false
* 需要自己处理异常,file对象表示的目录路径不存在时,抛出异常!!!java.io.IOException
*
* public boolean mkdir();
* 创建单个文件夹,成功返回true,失败返回false(文件夹存在的时候,或者路径不存在)
*
* public boolean mkdirs();
* 创建多级目录,成功返回true,失败返回false(文件夹存在时)
/** * 删除 */ private static void show03() { File file = new File("D:\\Hello.txt"); System.out.println(file.delete()); //true 删除成功 File file1 = new File("D:\\love"); System.out.println(file1.delete()); //删除失败,只有文件夹是空的,才能删除成功 //构造方法的路径不存在,也会返回false } /** * 创建文件夹 * 文件夹存在时候,不会再次创建返回false * 对于 * mkdir:参数路径不存在,创建会失败,返回false * * 其他情况,都能创建文件夹成功,返回true */ private static void show02() { File file = new File("D:\\Hello"); //创建单个文件夹 System.out.println(file.mkdir()); File file1 = new File("D:\\love\\tomorrow"); //创建多个文件夹 System.out.println(file1.mkdirs()); //mkdir,mkdirs只能创建文件夹,并且mkirs也可以创建单个文件夹 File file2 = new File("D:\\Hello.txt"); System.out.println(file2.mkdirs()); } /** * 文件的创建 * @throws IOException */ private static void show01() throws IOException { File file = new File("demo05File.txt"); boolean newFile = file.createNewFile(); //第一次运行,没有文件,创建后返回true.第二次运行有文件,不创建,返回false System.out.println("newFile create ok ? " + newFile); File directoryNoNoNo = new File("iamDirectoryNoNoNo"); if(!directoryNoNoNo.exists()){ directoryNoNoNo.createNewFile(); } System.out.println("我仍然是一个文件哦"+directoryNoNoNo.getName()); // File file = new File("D:\\tt\\demo05File.txt"); //路径不存在,抛出java.io.IOException // boolean newFile = file.createNewFile(); //编译时异常,需要自己处理 }
1.7文件夹的遍历
* File类的遍历目录(文件夹)功能
* public String[] list();
* public File[] listFiles();
*
* 返回目录路径下的所有子文件和文件夹,
* 第一个方法返回的是子文件和文件夹的字符串,封装在String[]数组中
* 第二个方法返回的是子文件和文件夹的File对象,封装在File[]数组中
*
* 如果构造方法中的目录路径不存在,或者是一个文件,那么出现空指针异常
public static void main(String[] args) { // D:\JavaSE\ 08FileAndRecursion //File file = new File("D:\\JavaSE\\notExists"); //java.lang.NullPointerException File file = new File("D:\\JavaSE\\"); //打印项目目录内容 String[] list = file.list(); for (String str : list) { System.out.println(str); } System.out.println("------------------------"); File[] files = file.listFiles(); for (File dirFile: files ) { System.out.println(dirFile.getName()); } }