File初识和练习

File类

注:可能有如下三种情况:文件、文件夹、不存在的文件或文件夹

要知道的:在计算机里面的文件是存储在硬盘上,Java虽然需要和文件打交道,但是它是不可以直接对硬盘进行操作,而是通过虚拟机和我们的操作系统进行交互,所以File代表的是Java和文件的一种联系。因此这个文件可能存在也可能不存在,它是只是一个抽象的概念。

File对象的构建

//File f = new File(String path);直接构建
File f1 = new File("E:/java笔记/java导读.png");
//File f = new File(String parent,String child);父子构建
File f2 = new File("E:/java笔记","java导读.png");
//File f = new File(File p , String c);父对象子名称
File f3 = new File(new File("E:/java笔记"),"java导读.png");

File文件名、路径的获取

/**
* 获取File对象的名称
* String name = f.getName();
* 获取File对象的路径
* String path = f.getPath();构建File对象若使用的是相对路径则返回相对路径反之返回绝对路径
* String path = f.getAbsolutePath();返回File对象的绝对路径
* String path = f.getPatent();返回File对象父级路径,如果没有则返回null
*/

String name = f1.getName();
System.out.println("f1的name:"+ name);//f1的name:java导读.png
String path = f1.getPath();
System.out.println("f1的path:"+path);//f1的path:E:\java笔记\java导读.png
String pathParent = f1.getParent();
System.out.println("f1的parent路径:"+pathParent);//f1的parent路径:E:\java笔记

文件的状态

/**
* 判断文件的状态
* f.exists();
* f.isFile();
* f.isDirectory();
 */

boolean exist = f1.exists();
System.out.println("f1是否存在:"+exist);//f1是否存在:true
boolean isFile = f1.isFile();
System.out.println("f1是否是文件:" + isFile);//f1是否是文件:true
boolean isDirectory = f1.isDirectory();
System.out.println("f1是否是文件夹:" + isDirectory);//f1是否是文件夹:false

文件的其他操作

/**
 * 其他的信息
* long s = f.length();返回的文件的字节数,当为0是有两种情况:一:文件字节数为0;二:是文件夹
* Boolean b = file.createNewFile();当文件不存在是才创建成功
* Boolean b = file.delete();删除已经存在的文件
*/
System.out.println("f1的文件的字节数:"+ f1.length());
File newFile = new File("E:/java笔记/1.txt");
boolean isCreate = newFile.createNewFile();
System.out.println("是否创建成功:"+isCreate);
boolean delete = newFile.delete();
System.out.println("是否删除成功:"+delete);

创建文件夹

/**
* 创建文件夹:
* boolean b = f.mkdir();必须确保上级目录存在,否则创建失败
* boolean b = f.mkdirs();上级目录可以不存在,不存在则一同创建。
*/
File file = new File("E:/java笔记/mkdirTest");
boolean ismkdir = file.mkdir();
System.out.println("file创建目录是否成功:"+ ismkdir);
File file1 = new File("E:/java笔记/Test/mkdirsTest");
boolean ismkdirs = file1.mkdirs();
System.out.println("file2创建多级目录是否成功:"+ ismkdirs);

列出下一级

实战练习1:列出子孙级目录及名称

思路分析:

思路分析图:

/**
 * @描述:递归打印子孙级目录和文件的名称
 */
public class fileList {
    public static void main(String[] args) {
        File file = new File("E:/Linux笔记");
        printName(file,1);
    }
    /**
     * 
     *@描述:打印
     * @param f 要进行显示的File对象
     * @param count 控制显示的格式
     */
    public static void printName(File f, int count){
        //控制显示格式
        for(int i = 0; i < count; i++){
            System.out.print("-");
        }
        //打印
        System.out.println(f.getName());
        //递归头
        if(f == null || !f.exists()){
            return;
        }else if(f.isDirectory()){
            File[] lists = f.listFiles();
            for(File listFile : lists){
                //递归体
                printName(listFile,count+1);
            }
        }
    }
}
/*
*bank
*-Account.java
*--Bank.java
*---CheckingAccount.java
*----Customer.java
*-----SavingAccount.java
*------TestBanking.java
*/

实战练习2:列出文件及其子孙文件的总大小

注意:在判定file对象存在并且不为空的情况下还有判定file是文件才可以计算大小,文件夹是没有的大小。(所谓“文件夹的大小也是有文件夹里面的文件的总大小”)。

思路导图:

    /**
     * 
     *@描述:计算文件内容的大小(也就是计算总文件的大小)
     * @param file
     */
    public class list {
        public static void main(String[] args) {
            File file = new File("E:\\Java workspace\\exercise");
            countLength(file);
            System.out.println(length);
    }

    private static long length = 0;
    public static void countLength(File file){
        //判断File对象是否存在
        if(file != null && file.exists()){
            //存在:判断File对象是否是文件(只有是文件的情况下才能计算大小,目录是没有大小的)
            if(file.isFile()){
            length +=file.length();
            }else{
                //File对象存在但是不是文件:当File为目录,遍历其子孙并统计大小
                File[] files = file.listFiles();
                for(File f :files){
                    countLength(f);
                }
        }
        
    }
}

实战练习2_1:利用面向对象的思想计算文件夹的大小

思维导图:

public class countDir {
        //存放目录文件的大小
        long length = 0;
        //文件的路径
        String path ;
        //构建File对象
        File file ;
        //初始化构造器
        public countDir(String path) {
            this.path = path;
             //初始化源
            this.file = new File(path);
             //计算大小
            count(this.file);
        }
        /**
         * @return the length
         */
        public long getLength() {
            return length;
        }
    /**
     * 
     *@描述:计算File对象大小
     * @param file
     */
    public static void main(String[] args) {
        countDir test = new countDir("E:/Java workspace/exercise/src/bank");
        System.out.println("文件夹的大小为:"+test.getLength());
    }

    private void count(File file) {
        if(file != null && file.exists()){
            if(file.isFile()){
                length += file.length();
            }else{
                File[] files = file.listFiles();
                for(File f : files){
                    count(f);
                }
            }
        }   
    }   
}

猜你喜欢

转载自www.cnblogs.com/lomon6/p/10764069.html