IO File(构造函数、文件夹创建删除、文件过滤器)、递归
IO概述 (输入input和输出output) 简写
输出(写)Output:把内存中的数据存到持久化设备上
输入(写)Input:把持久设备上的数据读取到内存中
File 最关键的两个成员变量 ; \
file 类包含三个东西:文件:file 目录(文件夹):directory 路径:path
路径分隔符
与系统有关的路径分隔符 : window下是 “;”(pathSeparator) Linux下是:“\”(separator)
File类
类 :成员变量 成员方法 构造方法
package com.oracle.demo01; //成员变量 import java.io.File; public class Demo01 { public static void main(String[] args) { /*File类: 最关键的两个成员变量 ; \ 文件:file 目录(文件夹):directory 路径:path 路径分隔符*/ // 与系统有关的路径分隔符 win 是 ; linux 是 : System.out.println(File.pathSeparator); //; // 与系统有关的路径名称分隔符 win 是\ linux 是/ System.out.println(File.separator); //\ } }
构造函数
package com.oracle.demo01; //构造函数 import java.io.File; public class Demo02 { public static void main(String[] args) { // 第一个构造方法 File file=new File("f:\\java\\a.txt");// "\\"在java中转义的 所以是双\\ System.out.println(file); // 第二个构造方法 父路径 子路径:适用多个文件 File file2=new File("f:\\java","a.txt"); System.out.println(file2); // 第三个构造方法 :File类的父、子路径 File parent=new File("f:\\java"); File file3=new File(parent,"a.txt"); System.out.println(file3); } }
File类获取
创建和删除
package com.oracle.demo01; //File类的获取、文件的创建、删除、判断 import java.io.File; import java.io.IOException; public class Demo03 { public static void main(String[] args) throws IOException { method02(); method03(); method04(); method05(); } public static void method01(){ File file=new File("f:\\java\\a.text"); // 获取文件对象:绝对路径 System.out.println(file.getAbsolutePath()); // 举例 :File file=new File("src"); src可能根本不存在,“”里面随便写 看前面的 file为准 // 获取文件对象:文件名或者目录名 System.out.println(file.getName()); // 获取文件对象路径所对应:字符串 System.out.println(file.getPath());//类似toString() // 获取文件的长度(文件的大小字节:Long类型) System.out.println(file.length()); } // 文件创建 public static void method02() throws IOException{ File file=new File("f:\\java\\b"); boolean flag=file.createNewFile();//如果不加后缀,默认都建文件,不是文件夹 System.out.println(flag); } // 文件删除 public static void method03(){ File file=new File("F:\\java\\b"); // 删除文件 java的删除 =DOS下删除 彻底删除了 boolean flag=file.delete(); System.out.println(flag); } // 文件判断 public static void method04(){ File file=new File("F:\\java\\a.txt"); // 判断该文件对象所对应的文件:是否存在 System.out.println(file.exists()); // 判断该文件:是否是文件夹 System.out.println(file.isDirectory()); // 判断该文件对象:是否文件 System.out.println(file.isFile()); } // 创建文件夹 public static void method05(){ File file =new File("F:\\java\\B");//win下的目录名不区分大小写,最后的是目录名 boolean flag=file.mkdirs(); //建文件夹 mkdir:建一个目录 mkdirs :创建是多级目录(推荐) System.out.println(flag); } }
listFiles()方法介绍
package com.oracle.demo01; //listFiles()方法 import java.io.File; public class Demo04 { public static void main(String[] args) { method03(); } public static void method01(){ File file=new File("f:\\java"); // 获取该路径下的文件和文件夹 String[] arr=file.list(); // 遍历 for(String s:arr){ System.out.println(s);//显示所有文件名字 } } // 获得数组 public static void method02(){ File file=new File ("f:\\java"); // 获取该路径下的文件和文件夹所对应的文件对象 File[] files=file.listFiles(); for(File f:files){ System.out.println(f); } } public static void method03(){ File file=new File ("f:\\java"); // 获取该路径下的文件和文件夹所对应(括号内是条件=某个类型)的文件对象 File[] files=file.listFiles(new MyFileFileter()); for(File f:files){ System.out.println(f);//绝对路径:根本方法 } } }
注意:
1.指定必须是目录,不然会空指针出现NullPointerException
2.指定的文件夹必须存在
文件过滤器
FileFilter和FilenameFilter都是接口
package com.oracle.demo01; //过滤器 import java.io.File; import java.io.FileFilter; public class MyFileFileter implements FileFilter{ //实现类 @Override public boolean accept(File pathname) { // 获取文件名 /*String filename=pathname.getName(); // 判断文件名是否以.txt 结尾 boolean flag=filename.endsWith(".txt");//因为上一行返回值是String,所以可以用String的方法 return flag;*/ // 上面代码繁琐,可以用下面一行代码表示 return pathname.getName().endsWith(".txt"); } }
pm
递归 :自己调用自己
原理图
package com.oracle.demo02; //递归 public class Digui { public static void main(String[] args) { int sum=get(100); System.out.println(sum); } // 用递归计算1-100的和 // 100+(1100-1)+(99-1)+(98-1)+...1 public static int get(int num){ if(num==1){ return 1; } return num+get(num-1); } }
package com.oracle.demo02; import java.io.File; public class Digui2 { public static void main(String[] args) { File file=new File("f:\\java"); look(file); } public static void look(File file){ // 获取该路径所有文件和文件夹 File[] files=file.listFiles(new MyFilter());//获得.txt文件和目录 // 遍历 for(File f:files){ // 判定如果是文件夹继续寻找 if(f.isDirectory()){ // look(f); }else{ //不是文件夹就打印 System.out.println(f); } } } }
package com.oracle.demo02; import java.io.File; import java.io.FileFilter; public class MFilter implements FileFilter{ @Override public boolean accept(File pathname) { // 获取以后缀是.txt的文件,如果是文件夹,那么放到File[]数组内 if(pathname.isDirectory()){ return true; } return pathname.getName().endsWith(".txt"); } }
注意:
1、递归要有条件限定,够停下来,否则栈内溢出
2、虽然有条件限定,但次数不能太多
3、构造方法不能递归