java基础知识回顾之javaIO类File类

java基础知识回顾之javaIO类--File类

 

     File类是对文件系统中文件以及目录(文件夹)进行封装的对象,可以通过面向对象的思想来操作文件和目录(文件夹)。File类保存文件或目录的各种元素的信息,包括文件名,文件长度,最后修改日期,是否可读,获取当前文件的路径名,判断指定文件是否存在,获得当前文件的列表,创建、删除文件目录等方法。

  /**
     * 构造方法:File f = new File("file.txt");//file.txt 相对路径
     *       File f1 = new File("c:"+File.separator+"abc"+File.separator+"lp", "b.txt");//c:\abc\lp\b.txt 绝对路径
              File f2 = new File(File d, child);
 
        常用方法:
              新建文件:

      boolean createNewFile() 如果文件存在,则返回false,不会被覆盖,这和输出流不一样,IO输出流每次都会覆盖
                 public static File createTempFile(String prefix, String suffix) throws IOException
                     在默认的情况下创建一个临时空文件,给定前缀(abc)和后缀(.tmp)
                 public static File createTempFile(String prefix, String suffix, File directory) throws IOException
                      指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称
                  directory如果为null,使用默认的路径,  在windows上为C盘存放Tmp的目录下面,UNIX下面通常是"/tmp"或"/var/temp
             创建目录:

       boolean mkdirs() 可以递归的创建不存在的目录,创建多级目录
                  boolean mkdir() 创建目录,不能递归,如果存在不能创建,
             删除文件: boolean delete() 删除File对象所对应的文件和路径
                  public void deleteOnExit() 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录
             判断:

                 boolean exists()  测试此抽象路径名表示的文件或目录是否存在。
                 boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录。
                 boolean isFile()  测试此抽象路径名表示的文件是否是一个标准文件。
              获取:    

               String getName()
               String getParent()
               String getPath()
               String getAbsolutePath()  返回此抽象路径名的绝对路径名字符串。
               File getAbsoluteFile() 返回此抽象路径名的绝对路径名所对应的File对象
               long lastModified()   返回此抽象路径名表示的文件最后一次被修改的时间。
               long getFreeSpace() 获取指定分区(例如D盘)可用的空间,或者剩余的空间
               long getUsableSpace() 获取分区(例如D盘的可用于虚拟机的空间
               long getTotalSpace()获取分区(例如D盘)总容量
             重命名:boolean renameTo(File dest) :把某个路径下的文件重命名,从一个盘重命名后剪切到另一个盘
 
              列出指定目录下面的文件:
               String[] list() 返回文件或者目录的名字,是字符串类型
               File[] listFiles() 返回文件或者目录对象,通过getName获取文件或者路径名称

            文件过滤:
                String[] list(FilenameFilter filter)
                FilenameFilter-->>boolean accept(File dir, String name)
                可以使用此方法列出指定目录下面的带有某些后缀的文件
     *
     */

下面是看jdk6的测试代码:

复制代码
public class FileDemo {
    public static void main(String[] args) throws IOException {
        //createFileMethod();
        listRoots();
    }
    //创建文件
    public static void createFileMethod(){
        File file = new File("file.txt");
        try {
            boolean b = file.createNewFile();
            System.out.print(b);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //创建临时文件
    public static void createTempFileMethod(){
        File dir = new File("D:\\");
        try {
            File b = File.createTempFile("test", ".tmp",dir);//使用指定目录的方法
            System.out.print(b.getAbsolutePath());
            File b1 = File.createTempFile("tmp2", null);//使用不指定目录的构造方法
            System.out.print(b1.getAbsolutePath());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //创建目录
    public static void createDirMethod(){
        File dir = new File("d:"+File.separator+"dfr"+File.separator+"ddd");
        File dir1 = new File("d:"+File.separator+"dff"+File.separator+"ddd");
        boolean b = dir.mkdirs();//可以递归的创建不存在的目录
        boolean b1 = dir1.mkdir();//创建目录,不能递归,只能创建一级目录
        System.out.println(b);
        System.out.println(b1);
    }
    
    //删除文件
    public static void deleteFileMethod(){
        File file = new File("file.txt");
        try {
            boolean b = file.createNewFile();
            System.out.print(b);
            file.deleteOnExit();
            file.delete();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //判断文件对象或者目录是否是文件或者目录时候,必须判断该文件是否存在
    public static void IsDirOrFileMethod() throws IOException{
        File file  = new File("a.txt");
        File file1  = new File("d:"+File.separator+"hhh");
        file.createNewFile();
        file1.mkdir();
        System.out.println("是否存在"+file.exists());
        System.out.println("是否是文件"+file.isFile());
        System.out.println("是否是目录"+file.isDirectory());
        System.out.println("是否是隐藏"+file.isHidden());
        System.out.println("目录是否为绝对目录名"+file1.isAbsolute());
        System.out.println("file对象对应的文件目录是否可write: "+file1.canWrite());
        System.out.println("file对象对应的文件目录是否可read: "+file1.canRead());
        System.out.println("file对象对应的文件目录是否可Execute: "+file1.canExecute());
    }
    //获取的方法
    public static void getMehtod(){
        File file = new File("E:\\file2.txt");
        File dir = new File("abc");
        System.out.println("获取抽象路径名转化为路径名字字符串:"+file.getPath());//E:\file2.txt
        System.out.println("获取此File对象对应的绝对路径名:"+file.getAbsolutePath());//E:\file2.txt
        System.out.println("获取此File对象的所对应目录(最后一级子目录(绝对路径))的父目录名:"+file.getParent());//E:\
        System.out.println("获取此File对象最后修改时间:"+file.lastModified());//1405853667765,修改日期的毫秒数
    }
    //相当于重命名剪切
    public static void renameFile() throws IOException{
        File f1 = new File("D:\\file.txt");
        File f2 = new File("E:\\file2.txt");
        System.out.println("f1重命名为f2的名字"+f1.renameTo(f2));
        //System.out.println("f2重命名为f1的名字"+f2.renameTo(f1));
    }
    
    //列出根目录的全部内容
    public static void listRoots(){
        File[] files = File.listRoots();
        for(File file:files){
            System.out.println("列出根目录:"+file);
        }
    }
    //列出指定的目录的全部内容,包括隐藏文件,文件夹的名字和文件的名字
    public static void listDemo(){
        File f = new File("d:\\");
        System.out.println("获取D盘的可用空间"+f.getFreeSpace());
        System.out.println("获取D盘的可用于虚拟机的空间"+f.getUsableSpace());
        System.out.println("获取D盘的总容量"+f.getTotalSpace());
        String[] files = f.list();
        for(String file:files){
            System.out.println("列出根目录:"+file);
        }
    }
    //列出指定的目录的全部内容,包括隐藏文件,文件夹的名字和文件的名字
    public static void listFileterDemo(){
        File f = new File("d:\\");
        String[] files = f.list();
        for(String file:files){
            System.out.println("列出根目录:"+file);
        }
    }
    //列出指定的目录的全部内容,包括隐藏文件,文件夹的名字和文件的名字,使用 File[] listFiles() 
    //返回值为一个File对象
    public static void listFileDemo(){
        File f = new File("d:\\");
        File[] files = f.listFiles();
        for(File file:files){
            System.out.println("列出根目录:"+file.getName());
        }
    }
    /**
     * 列出指定目录下,后缀为.java的文件,使用方法String[] list(FilenameFilter filter)
     */
    public static void ListFileFileter(){
        File f = new File("E:"+File.separator+"workspace"+File.separator+"IOTest");
        String[] files = f.list(new FilenameFilter() {
            
            @Override
            public boolean accept(File dir, String name) {
                // TODO Auto-generated method stub
                //System.out.println("dir:"+dir+"name....."+name);//说明dir表示指定目录,name表示指定目录的名称
                return name.endsWith(".java");//通过匿名内部类的返回值来控制指定目录下面的文件和文件夹的显示
            }
        });
        System.out.println(files.length);
        //遍历指定目录下面的文件和目录
        for(String file:files){
            System.out.println(file);
        }
    }
     
}
复制代码

java基础知识回顾之javaIO类--File类应用:递归深度遍历文件

代码如下:

   

复制代码
package com.lp.ecjtu.File.FileDeepList;

import java.io.File;

public class FileDeepList {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File dir = new File("E:"+File.separator+"demodir");
        showDirDeep(dir,0);
    }
    /**
     * 深度遍历目录下面的内容,递归,包含子目录的内容
     * @param dir
     */
    public static void showDir(File dir){
        File[] files = dir.listFiles();
        for(int i=0;i<files.length;i++){
            if(dir.exists()){
                if(files[i].isDirectory()){//如果是文件夹,继续列出指定子文件夹的内容
                    showDir(files[i]);//使用递归
                }else{
                    System.out.println(files[i].getName());//是文件
                }
            }
        }
    }
    /**
     * 深度遍历目录下面的内容,递归,包含子目录的内容,并且使得遍历的目录有层次,加个层次计数器,第几层就加几
     * @param dir 目录或者文件
     * @param level 深度遍历层次计数器
     */
    public static void showDirDeep(File dir,int level){
        if(!dir.exists()){
            System.out.println("遍历的目录为空!");
        }
        System.out.println(getSpace(level)+dir.getName());
        level++;
        File[] files = dir.listFiles();
        for(int i=0;i<files.length;i++){
            if(files[i].isDirectory()){//如果是文件夹,继续列出指定子文件夹的内容
                showDirDeep(files[i],level);//使用递归
            }else{
                System.out.println(getSpace(level)+files[i].getName());//是文件
            }
        }
    }
    /**
     * 格式化层次
     * @param level
     * @return
     */
    private static String getSpace(int level) {
        // TODO Auto-generated method stub
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<level;i++){//几层就拼几个字符
            sb = sb.append("|--");
        }
        return sb.toString();
    }
    
    
}
复制代码
 
原文地址:https://www.cnblogs.com/hanease/p/15717290.html