Java——IO

Java——IO,第1张

1、File类

File类中的java.io包是唯一代表磁盘文件本身的对象,能够创建、删除或重命名文件,判断硬盘上某个文件是否存在,查询文件最后修改时间等。

File类的常用的构造方法

1.1 创建File对象

所有的构造方法都需要传入文件的路径。如上图,如果程序只处理一个目录或文件,并且知道该目录或文件的路径,使用第一个构造方法较方便。如果程序处理的是一个公共目录中的若干子目录或文件,那么使用第二个或者第三个构造方法会更方便。

【案例】,

需要注意的是在创建File文件时传入的路径使用了" \\ " ,这是因为在windows中目录符号为反斜线" \ ",但反斜线在java中是特殊字符,表示转义符,所以使用反斜线时,前面应该再添加一个反斜线,即为" \\ ",除此之外,目录符号还可以用正斜线" / "表示,如:src/Hello.java

import java.io.File;
public class test{
    public static void main (String[] args){
        File f = new File("E:\Java base\第七章IO\a.txt"); //使用绝对路径构造File对象
        File f1=new File("src\Hello.java"); //使用相对路径构造File对象
        System.out.println(f);
        System.out.println(f1);
    }
}

【运行结果】

1.2 File类的常用方法

File类提供了一系列方法,用于 *** 作其内部封装的路径指向的文件或目录。例如,判断文件或目录是否存在,文件的创建于删除文件等,如下图:

 【案例】

import java.io.File;
import java.io.IOException;
public class test{
    public static void main (String[] args)throws IOException{
        File f = new File("E:\Java base\第七章IO\b.txt"); //使用绝对路径构造File对象
        if(f.exists()){     //如果存在这个文件就删除,否则就创建
            f.delete();
        }else{
            System.out.println(f.createNewFile());
        }
        //在磁盘下创建一层目录,并且在目录下创建文件
        File fileDemo=new File("E:\Java base\第七章IO\hello\b.txt");
        if(!(fileDemo.getParentFile().exists())){   //判断E:\Java base\第七章IO\hello\目录是否存在
            fileDemo.getParentFile().mkdir();
        }
        if(fileDemo.exists()){      //如果存在这个文件就删除,否则就创建
            fileDemo.delete();
        }else{
            System.out.println(fileDemo.createNewFile());
        }
    }
}

 【运行结果】

 1.3 遍历目录下的文件

File类的list()方法用于遍历指定目录下的所有文件。

【案例】

import java.io.File;
import java.io.IOException;
public class test{
    public static void main (String[] args)throws IOException{
        //创建File对象
        File f = new File("E:\Java base\第七章IO"); 
        if(f.isDirectory()){   //判断File对象对应的目录是否存在
            String[] names=f.list(); //获得目录下的所有文件的文件名
            for (String name:names){
                System.out.println(name); // 输出文件名
            }

        }
    }
}

 【运行结果】

下面通过一个案例来演示如何遍历指定目录下所有扩展名为" .java "的文件。

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
public class test{
    public static void main (String[] args)throws IOException{
        //创建File对象
        File f = new File("E:\Java base\第七章IO");
        //创建过滤器对象
        FilenameFilter filter = new FilenameFilter() {
            //实现accept()方法
            public boolean accept (File dir,String name){
                File currFile = new File(dir, name);
                // 如果文件名以.java结尾返回true,否则返回false
                if (currFile.isFile()&&name.endsWith(".java")){
                    return true;
                }else{
                    return false;
                }
            }
        };
        if (f.exists()){  // 判断File对象对应的目录是否存在
            String[] lists=f.list(filter);  //获得过滤后的所有文件名数组
            for(String name:lists){
                System.out.println(name);
            }
        }
    }
}

【运行结果】


前面两个案例演示的都是遍历目录下文件的文件名,有时候在一个目录下,除了文件,还有子目录,如果想得到所有子目录下的File类对象,list()方法显然不能满足要求,这时需要使用FIle类提供的另一种方法listFiles()。

listFiles()方法返回一个File对象数组,当对数组中的元素进行遍历时,如果元素中还有子目录需要遍历,则需要使用递归。

【案例】

调用listFiles()方法把该目录下所有的子目录和文件存到一个File类型的数组fires中,在通过for循环遍历数组files,并对当前遍历的File对象进行判断,如果是目录就重新调用fileDir()方法进行递归,如果是文件就直接打印输出文件的路径,这样就成功遍历了该目录下所有的文件。

import java.io.File;
import java.io.IOException;
public class test{
    public static void main (String[] args)throws IOException{
        File file= 
            new File("E:\Java base\第七章IO");
            fileDir(file); //调用FileDir方法
    }
    public static void fileDir(File dir){
        File[] files = dir.listFiles(); //获得表示目录下所有文件的数组
        for (File file :files){     //遍历所有的子目录和文件
            if(file.isDirectory()){ 
                fileDir(file); //如果是目录,递归调用fileDir()
            }
            System.out.println(file.getAbsolutePath()); //输出文件的绝对路径
        }
    }
}

【运行结果】

这样就遍历到了所有的文件

1.4 删除文件及目录

【案例】

import java.io.File;
import java.io.IOException;
public class test{
    public static void main (String[] args)throws IOException{
        File file= new File("E:\Java base\第七章IO\hello");
        if(file.exists()){
            System.out.println(file.delete());
        }
    }
}

【运行结果】

运行结果中输出了false,这说明删除文件失败了,原因在于File类的delete()方法只能删除一个指定的文件,如果File对象代表目录,并且目录下包含子目录或者文件,则File类的detele()方法不允许直接删数这个目录。

这时候我们需要使用递归的方式来进行删除了

import java.io.File;
import java.io.IOException;
public class test{
    public static void main (String[] args)throws IOException{
        File file= new File("E:\Java base\第七章IO\hello");
        deleteDir(file); // 调用deleteDir删除方法
    }
    public static void deleteDir(File dir){
        if (dir.exists()){ //判断传入的File对象是否存在
            File[] files=dir.listFiles();   //得到FIle数组
            for(File file:files){  //遍历所有的子目录和文件
                if(file.isDirectory()){
                deleteDir(file);    //如果是目录,则递归调用deleDir()
                }else{
                //如果是文件,则直接删除
                file.delete();
            }
        }
        // 删除完一个目录里的所有文件后,就删除这个目录
        dir.delete();
    }
}
}

【运行结果】

可以发现,该目录已经被删除了。 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/871419.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存