Java中的File类,递归是什么?
一、IO概述
当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。
当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。
因此我们把这种输入和输出动作称为IO操作。
二、File类
1、File类构造函数
public class FileDemo { public static void main(String[] args) { //File构造函数演示 String pathName = "e:\\java_code\\day22e\\hello.java"; File f1 = new File(pathName);//将Test22文件封装成File对象。注意;有可以封装不存在文件或者文件夹,变成对象。 System.out.println(f1); File f2 = new File("e:\\java_code\\day22e","hello.java"); System.out.println(f2); //将parent封装成file对象。 File dir = new File("e:\\java_code\\day22e"); File f3 = new File(dir,"hello.java"); System.out.println(f3); } }
2、File类属性
//与系统有关的路径分隔符 System.out.println(File.pathSeparator); //与系统有关的默认名称分隔符 System.out.println(File.separator);
3、File类的获取
方法演示如下:
public class FileMethodDemo { public static void main(String[] args) { //创建文件对象 File file = new File("Test22.java"); //获取文件的绝对路径,即全路径 String absPath = file.getAbsolutePath(); //File中封装的路径是什么获取到的就是什么。 String path = file.getPath(); //获取文件名称 String filename = file.getName(); //获取文件大小 long size = file.length(); System.out.println("absPath="+absPath); System.out.println("path="+path); System.out.println("filename="+filename); System.out.println("size="+size); } }
5、文件和文件夹的创建删除
public static void main(String[] args) throws IOException { //创建文件 File file=new File("F:\\java\\io0512\\a.txt"); //boolean flag=file.createNewFile(); //System.out.println(flag); //判断文件是否存在 System.out.println(file.exists()); //判断是否是个文件夹 System.out.println(file.isDirectory()); //判断是否是文件 System.out.println(file.isFile()); //删除文件 //file.delete(); //创建文件夹 file.mkdir(); File file2=new File("F:\\java\\io0512\\q\\z\\x\\c"); boolean a= file2.mkdirs(); System.out.println(a); }
6、listFiles()方法介绍
public class FileMethodDemo3 { public static void main(String[] args) { File dir = new File("e:\\java_code"); //获取的是目录下的当前的文件以及文件夹的名称。 String[] names = dir.list(); for(String name : names){ System.out.println(name); } //获取目录下当前文件以及文件对象,只要拿到了文件对象,那么就可以获取其中想要的信息 File[] files = dir.listFiles(); for(File file : files){ System.out.println(file); } } }
注意:在获取指定目录下的文件或者文件夹时必须满足下面两个条件
1,指定的目录必须是存在的,
2,指定的必须是目录。否则容易引发返回数组为null,出现NullPointerException
7、文件过滤器
测试类:
public class FileDemo2 { public static void main(String[] args) { //获取扩展名为.java所有文件 //创建File对象 File file = new File("E:\\code\\day11_code"); //获取指定扩展名的文件,由于要对所有文件进行扩展名筛选,因此调用方法需要传递过滤器 File[] files = file.listFiles(new MyFileFilter()); //遍历获取到的所有符合条件的文件 for (File f : files) { System.out.println(f); } } }
自定类继承FilenameFilter过滤器接口:
//定义类实现文件名称FilenameFilter过滤器 class MyFileFilter implements FilenameFilter{ public boolean accept(File dir, String name) { return name.endsWith(".java"); } }
二、递归
1、递归的概述:
递归,指在当前方法内调用自己的这种现象
public void method(){ System.out.println(“递归的演示”); //在当前方法内调用自己 method(); }
2、使用递归计算1-n直接的和
public static void main(String[] args) { //计算1~num的和,使用递归完成 int n = 5; int sum = getSum(n); System.out.println(sum); } public static int getSum(int n) { if(n == 1){ return 1; } return n + getSum(n-1); } }
3、递归打印所有子目录中的文件路径
步骤:
1. 指定要打印的目录File对象
2. 调用getFileAll()方法
2.1 获取指定目录中的所有File对象
2.2 遍历得到每一个File对象
2.3 判断当前File 对象是否是目录
判断结果为true,说明为目录,通过递归,再次调用步骤2的getFileAll()方法
判断结果为false,说明是文件,打印文件的路径
public class FileDemo2 { public static void main(String[] args) { File file = new File("d:\\test"); getFileAll(file); } //获取指定目录以及子目录中的所有的文件 public static void getFileAll(File file) { File[] files = file.listFiles(); //遍历当前目录下的所有文件和文件夹 for (File f : files) { //判断当前遍历到的是否为目录 if(f.isDirectory()){ //是目录,继续获取这个目录下的所有文件和文件夹 getFileAll(f); }else{ //不是目录,说明当前f就是文件,那么就打印出来 System.out.println(f); } } } }
4、斐波那契数列
public static void main(String[] args) { System.out.println(get(12)); } public static int get(int n){ if(n==1){ return 1; } if(n==2){ return 1; } return get(n-1)+get(n-2); }
三、冒泡排序
public static void main(String[] args) { int[]arr={7,1,6,22,11,3,2}; int n=0; for(int i=0;i<arr.length-1;i++){ for(int j=0;j<arr.length-i-1;j++){ if(arr[j]>arr[j+1]){ n=arr[j]; arr[j]=arr[j+1]; arr[j+1]=n; } } } for(int i:arr){ System.out.println(i); } }