三十六、Java基础之File类

一、File类

import java.io.File;
import java.io.IOException;

/**
 * 使用IO流读写文件的内容,如果对文件/文件夹操作,可以使用File类
 * 创建File对象
 */

public class Test01 {
    public static void main(String[] args) throws IOException {
        //1.通过File构造方法的参数创建指定路径,File对象可以是文件夹,也可以是文件
        File dir1 = new File("/Users/photo/meinvNo1");

        File dir2 = new File("/Users/photo/meinvNo2");

        dir1.mkdir();//创建文件夹
        dir2.createNewFile();//创建文件

        //通过File构造方法的第一个参数指定的上级目录
        File dir3 = new File("/Users/photo/meinvNo1","sub1");
        File dir4 = new File("/Users/photo/meinvNo1","sub2");

        dir3.mkdir();
        dir4.createNewFile();

        File dir5 = new File(dir3,"sub3");
        File dir6 = new File(dir3,"sub3");

        dir5.mkdir();
        dir6.createNewFile();//创建sub3文件夹,出现了重名现象

        //在创建File对象,也可以使用绝对路径
        File dir7 = new File("folder");

        dir7.mkdir();




    }

}

输出:

二、File中的分割符

import java.io.File;

/**
 * separator文件分割符 与 pathSeparator  路径分割符
 */

public class Test02 {
    public static void main(String[] args) {

        System.out.println(File.separator);//  /   在windows中是反斜杠,在其他操作系统中是/
        System.out.println(File.pathSeparator);//  :路径分割符。  win系统中为;


    }
}

三、File类中的常用操作

/**
 *File类中常用操作:
 * 1、createNewFile :创建一个新的文件
 * 2、delete 删除file对象
 * 3、exists :判断file对象是否存在
 * 4、getAbsoluteFile: 返回file对象的绝对路径形式(返回file对象)
 * 5、getAbsolutePath: 返回file对象的绝对路径
 * 6、getFreeSpace:返回指定盘符的空闲空间大小
 * 7、getName:返回file对象的名称
 * 8、getParent:返回file对象的上一级目录
 * 9、getParentFile:返回file对象的上一级目录(返回的file对象)
 * 10、getPath:返回路径
 * 11、getTotalSpace:返回路径磁盘的总大小
 * 12、getUsableSpace:返回路径磁盘的可用大小
 * 13、isAbsolute:判断是否为绝对路径
 * 14、isDirectory:判断是否为文件夹
 * 15、isFile:判断是否为文件
 * 16、isHidden:判断file是否隐藏
 * 17、lastModified:返回最后一次修改时间,是从1970-01-01 00:00:00 经过的毫秒数
 * 18、list:列出文件夹的内容
 * 19、length:文件的长度
 * 20、list:列出文件夹中的内容(Stirng[])
 * 21、listFiles:列出文件夹中的内容(File[])
 * 22、mkdir:创建文件夹,如果上一级目录不存在,则创建失败
 * 23、mkdirs:创建文件夹,如果上一级目录不存在,先创建上一级目录,在创建当前文件
 * 24、renameTo(File dest):重命名,如果dest对象和当前对象不在同一目录中,相当于文件移动
 * 25、
 */

例1:

import java.io.File;
import java.io.IOException;
import java.util.Date;

/**
 *File类中常用操作:
 * 1、createNewFile :创建一个新的文件
 * 2、delete 删除file对象
 * 3、exists :判断file对象是否存在
 * 4、getAbsoluteFile: 返回file对象的绝对路径形式(返回file对象)
 * 5、getAbsolutePath: 返回file对象的绝对路径
 * 6、getFreeSpace:返回指定盘符的空闲空间大小
 * 7、getName:返回file对象的名称
 * 8、getParent:返回file对象的上一级目录
 * 9、getParentFile:返回file对象的上一级目录(返回的file对象)
 * 10、getPath:返回路径
 * 11、getTotalSpace:返回路径磁盘的总大小
 * 12、getUsableSpace:返回路径磁盘的可用大小
 * 13、isAbsolute:判断是否为绝对路径
 * 14、isDirectory:判断是否为文件夹
 * 15、isFile:判断是否为文件
 * 16、isHidden:判断file是否隐藏
 * 17、lastModified:返回最后一次修改时间,是从1970-01-01 00:00:00 经过的毫秒数
 * 18、list:列出文件夹的内容
 * 19、length:文件的长度
 * 20、list:列出文件夹中的内容(Stirng[])
 * 21、listFiles:列出文件夹中的内容(File[])
 * 22、mkdir:创建文件夹,如果上一级目录不存在,则创建失败
 * 23、mkdirs:创建文件夹,如果上一级目录不存在,先创建上一级目录,在创建当前文件
 * 24、renameTo(File dest):重命名,如果dest对象和当前对象不在同一目录中,相当于文件移动
 * 25、
 */

public class Test03 {


    public static void main(String[] args) throws IOException {

        File dir = new File("/Users/chushujin/chushujin/photo/meinvNo1");
        //dir.createNewFile();
        //dir.delete();
        dir.exists();
        System.out.println(dir.getAbsoluteFile());
        System.out.println(dir.getAbsolutePath());
        System.out.println(dir.getFreeSpace());
        System.out.println(dir.getName());
        System.out.println(dir.getParent());
        System.out.println(dir.getParentFile());
        System.out.println(dir.getPath());
        System.out.println(dir.getTotalSpace());
        System.out.println(dir.getUsableSpace());
        System.out.println(dir.isAbsolute());
        System.out.println(dir.isDirectory());
        System.out.println(dir.isFile());
        System.out.println(dir.isHidden());
        System.out.println(dir.lastModified());
        System.out.println(new Date(dir.lastModified()));
        System.out.println(dir.list());
        System.out.println(dir.length());
        System.out.println(dir.listFiles());
        System.out.println(dir);



        
    }
}

例2

import java.io.File;
import java.io.FilenameFilter;

public class Test04 {

    public static void main(String[] args){

        String folder = "/Users/photo/";

        listsubDir1(folder);
        /**
         * out.txt
         * WechatIMG2.jpeg
         * WechatIMG3.jpeg
         * .DS_Store
         * meinvNo1
         * javabak.txt
         * bos.txt
         * input.txt
         * log.txt
         * myjava.java
         * 888.jpg
         * QQ20190615-0.jpg
         * meinvNo2
         * java.java
         * javaauto.txt
         * output.txt
         * zhangsan.txt
         */
        System.out.println("----------------------------------");
        listsubDir2(folder);
        /**
         * /Users/photo/out.txt
         * /Users/photo/WechatIMG2.jpeg
         * /Users/photo/WechatIMG3.jpeg
         * /Users/photo/.DS_Store
         * /Users/photo/meinvNo1
         * /Users/photo/javabak.txt
         * /Users/photo/bos.txt
         * /Users/photo/input.txt
         * /Users/photo/log.txt
         * /Users/photo/myjava.java
         * /Users/photo/888.jpg
         * /Users/photo/QQ20190615-0.jpg
         * /Users/photo/meinvNo2
         * /Users/photo/java.java
         * /Users/photo/javaauto.txt
         * /Users/photo/output.txt
         * /Users/photo/zhangsan.txt
         */
        System.out.println("----------------------------------");
        listsubDir3(folder);
        /**
         * Users/photo/out.txt
         * /Users/photo/javabak.txt
         * /Users/photo/bos.txt
         * /Users/photo/input.txt
         * /Users/photo/log.txt
         * /Users/photo/myjava.java
         * /Users/photo/java.java
         * /Users/photo/javaauto.txt
         * /Users/photo/output.txt
         * /Users/photo/zhangsan.txt
         */
    }

    private static void listsubDir3(String folder) {
        File dir = new File(folder);

        File[] files = dir.listFiles(new FilenameFilter() {
            //在匿名内部类中重写抽象方法
            @Override
            public boolean accept(File dir, String name) {
                return name.endsWith(".txt") || name.endsWith("java");
            }
        });
        for (File file:files
             ) {
            System.out.println(file.getAbsolutePath());
        }
    }

    private static void listsubDir1(String folder) {

        File dir = new File(folder);

        String[] list = dir.list();

        for (String str: list
             ) {
            System.out.println(str);
        }
    }

    private static void listsubDir2(String folder) {

        File dir = new File(folder);
        File[] files = dir.listFiles();
        for (File file : files
             ) {
            System.out.println(file.getAbsolutePath());

        }

    }
}

 四、将一个文件夹中的所有内容复制到另一新文件夹

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 *  文件夹的递归显示与复制
 *
 */

public class Test05 {

    public static void main(String[] args){

        String folder = "/Users/java";
        //文件夹的递归调用
        listsubdir(folder);
        /**
         * /Users/photo/out.txt
         * /Users/photo/WechatIMG2.jpeg
         * /Users/photo/WechatIMG3.jpeg
         * /Users/photo/.DS_Store
         * /Users/photo/meinvNo1
         * /Users/photo/meinvNo1/sub1
         * /Users/photo/meinvNo1/sub1/sub3
         * /Users/photo/meinvNo1/a.txt
         * /Users/photo/meinvNo1/log.java
         * /Users/photo/meinvNo1/sub2
         * /Users/photo/javabak.txt
         * /Users/photo/bos.txt
         * /Users/photo/input.txt
         * /Users/photo/log.txt
         * /Users/photo/myjava.java
         * /Users/photo/888.jpg
         * /Users/photo/QQ20190615-0.jpg
         * /Users/photo/meinvNo2
         * /Users/photo/java.java
         * /Users/photo/javaauto.txt
         * /Users/photo/output.txt
         * /Users/photo/zhangsan.txt
         */
        copyDir(folder,"/Users/java1");
    }

    private static void copyDir(String srcFolder, String destFolder) {

        //判断目标文件夹是否存在,如果不存在,需要创建新的文件夹
        File dest = new File(destFolder);
        if (!dest.exists()){
            dest.mkdir();
        }

        // 遍历srcFolder中的文件,复制到destFolder中
        File src = new File(srcFolder);
        File[] files = src.listFiles();
        for (File file: files
             ) {
            //如果是文件夹,先在destFile中创建新的文件夹,如果是文件,直接复制
            if (file.isDirectory()){
                
                //先需要知道要创建的文件名
                File destsubDir = new File(destFolder,file.getName());
                destsubDir.mkdir();
                //复制文件
                copyDir(file.getAbsolutePath(),destsubDir.getAbsolutePath());

            }else{
                //直接复制
                File destFile = new File(destFolder,file.getName());
                copyFile(file,destFile);//复制文件
            }
        }


    }

    private static void copyFile(File srcFile,File destFile){



        FileInputStream fis  = null;
        FileOutputStream fos = null;
        try {
            fis = new FileInputStream(srcFile);
            fos = new FileOutputStream(destFile);

            byte[] bytes = new byte[8];

            int len = fis.read(bytes);
            while(len != -1 ){

                fos.write(bytes,0,len);
                len=fis.read(bytes);

            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fis !=null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fos !=null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }



    }

    private static void listsubdir(String folder) {

        File dir = new File(folder);

        File[] files = dir.listFiles();
        for (File file : files
             ) {
            System.out.println(file.getAbsolutePath());
            if (file.isDirectory()){
                listsubdir(file.getAbsolutePath());//递归调用
            }
        }
    }
}
原文地址:https://www.cnblogs.com/chushujin/p/11562569.html