File

IO概述:

    当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。

    当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。因此我们把这种输入和输出动作称为IO操作。

File类:

    构造函数:

    

     

public class Demo01 {

	public static void main(String[] args) {
		//将文件封装为File对象
          //第一种方式 File file=new File("D:\io0803\demo01.txt"); System.out.println(file); //2:第二种方式比第一种方式灵活 File file2=new File("D:\io0803","demo01.txt"); System.out.println(file2); //3:最为灵活 File parent=new File("D:\io0803"); File file3=new File(parent,"demo01.txt"); System.out.println(file3); //与系统有关的路径分隔符 System.out.println(File.pathSeparator);//可以自动识别当前的系统,linux是: //与系统有关的默认名称分隔符 System.out.println(File.separator);//linux } }

     此方法不会判断此文件是否存在。

File类的获取:

    

     

public class Demo02 {

	public static void main(String[] args) {
		File file=new File("D:\io0803\demo01.txt");
		//获取绝对路径
		String path=file.getAbsolutePath();
		System.out.println("绝对路径:"+path);
		//获取路径字符串
		String path2=file.getPath();
		System.out.println("路径字符串:"+path2);
		//获取文件名
		String name=file.getName();
		System.out.println("文件名:"+name);
		//获取文件大小
		long len=file.length();
		System.out.println("文件长度:"+len);
		//文件以字节存储,所以类型是long
	}

}

 文件和文件夹的创建与删除:

  

   

public class Demo03 {

	public static void main(String[] args) throws IOException {
		method04();
		
	}
//创建文件
	public static void method01() throws IOException{
		//描述要创建的文件
		File file=new File("D:\io0803\demo01.txt");
		//创建文件(不能创建文件夹)
		//当文件已存在不能创建
		boolean f=file.createNewFile();
		System.out.println(f);
	}
//删除文件
	public static void method02(){
		//明确要删除文件的路径
		File file=new File("D:\io0803\aa");
		//删除文件(既可以删除文件也可以删除文件夹),删除多级文件夹只能从后面一个文件夹一个文件夹的删除。
		boolean flag=file.delete();
		System.out.println(flag);
	}
//判断文件
	public static void method03(){
		File file=new File("D:\io0803\demo01.txt");
		//是否存在
		System.out.println(file.exists());
		//是否是文件夹
		System.out.println(file.isDirectory());
		//是否是文件
		System.out.println(file.isFile());
	}
//创建文件夹
	public static void method04(){
		File file=new File("D:\io0803\a\b\c\d\e");
		//创建
		file.mkdir();
		//创建多级目录
		file.mkdirs();
	}
}

 ListFile()方法:

    

    

public class Demo04 {
public static void main(String[] args) {
	File file=new File("D:\io0803");
	//获取该目录文件下的所有文件夹名称组成的String 数组
	/*String files[]=file.list();
	for(String f:files){
		System.out.println(f);
	}*/
	//获取该目录下的所有文件或文件夹对象组成的File数组
	File[] files=file.listFiles();
	for(File f:files){
		System.out.println(f);
	}
}
}

 文件过滤器:

    接口:

      FileFilter  用于抽象路径名的过滤器

      FileFilter 过滤器中的accept方法接受一个参数,这个参数就当前文件或文件夹对象,当我们想对当前文件或文件夹进行过滤,就可以使用FileFilter ,比如需要当前目录下的所有文件夹,就可以使用FileFilter 过滤器。

      

      代码:

        

import java.io.File;
import java.io.FileFilter;
//文件过滤器
public class MyFileFilter implements FileFilter{

public boolean accept(File pathname) {
    //过滤应该过滤什么条件下的文件
    //筛选以.txt结尾的文件
    //获取文件名
    /*String name=pathname.getName();
    //将文件名转小写
    name=name.toLowerCase();
    //判断后缀
    boolean flag=name.endsWith(".txt");
    return flag;*/
    return pathname.getName().toLowerCase().endsWith(".txt");
}
}
public class Demo01 {
public static void main(String[] args) {
    //筛选io0803下的所有.txt文件
    File file=new File("D:\io0803");
    //筛选文件
    File[] files=file.listFiles(new MyFileFilter());
    for(File f:files){
        System.out.println(f);
    }
}
}

递归:

    指在当前方法内调用自己的现象。

    递归分为直接递归和间接递归。

       递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。

    

     public class Demo01 {

    public static void main(String[] args) {

        int num = get(5);
        System.out.println(num);
        int nn=add(5);
        System.out.println(nn);
        System.out.println(sum(6));
    }

    // 用递归计算1-5的和
    public static int get(int n) {
        if (n == 1) {
            return 1;
        }
        return n + get(n - 1);
    }
    //用递归计算5的阶乘
    public static int add(int n){
        if(n==1){
            return 1;
        }
        return n*add(n-1);
    }
    //斐波那契数列
    public static int sum(int n){
        if(n==1){
            return 1;
        }
        if(n==2){
            return 1;
        }
        return sum(n-1)+sum(n-2);
    }
}

 递归打印所有文件和文件夹:

    

public class Demo02 {

    public static void main(String[] args) {
        get(new File("D:\io0803"));

    }
    //参数代表要遍历的文件夹路径
public static void get(File file){
    System.out.println("===="+file+"====");
//获取当前文件夹中的所有文件和文件夹组成的File数组对象
    File[] files=file.listFiles();
    //遍历取到每一个File对象
    for(File f:files){
        //判断是否是文件夹
        if(f.isDirectory()){
            //继续获取该文件夹下的所有文件和文件夹
            get(f);    
        }else{
            //只要是文件就打印输出
            System.out.println(f);
        }
    }
}
}

递归打印指定的文件:

    

public class Myfilter implements FileFilter{

public boolean accept(File pathname) {
    //如果该文件是文件夹,直接true
    if(pathname.isDirectory()){
        return true;
    }
    return pathname.getName().toLowerCase().endsWith(".txt");
}
}


public class Demo03 {

    public static void main(String[] args) {
        get(new File("D:\io0803"));

    }
    //参数代表要遍历的文件夹路径
public static void get(File file){
//获取当前文件夹中的所有文件和文件夹组成的File数组对象
    File[] files=file.listFiles(new Myfilter());
    //遍历取到每一个File对象
    for(File f:files){
        //判断是否是文件夹
        if(f.isDirectory()){
            //继续获取该文件夹下的所有文件和文件夹
            get(f);    
        }else{
            //只要是文件就打印输出
            System.out.println(f);
        }
    }
}
}
原文地址:https://www.cnblogs.com/maxuefeng/p/13895426.html