Java--file类

6 篇文章 0 订阅
3 篇文章 0 订阅

一、概述
1.File类:文件和目录路径名的抽象表现形式。
2.用来对文件和文件夹的操作。
3.File类的实例是不可变的,一旦创建,File对象表示的抽象路径名不可以改变,
4.File对象可以作为参数传递给流的构造函数。
二、创建
File的构造方法
构造方法:
File(String pathname):根据一个路径得到File对象
File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
示例一:
File f1 = new File(“c:\abc\a.txt”);
将c:\abc\a.txt封装成File对象,可以将已有的或者还未创建的文件或者文件夹封装成对象。
示例二:
File f2 = new File(“C:\abc”,”b.txt”);
根据文件的所在目录和子文件创建对象。
示例三:

File f = new File("c:\\abcd");
File f2 = new File (f,"c.txt");

将文件的所在目录封装成对象,再将File对象和子文件封装成对象。

其实三种方式的效果都是一样的。
目录的分隔符再Java中使用\也可以使用。

三、File的常见方法
1.创建
public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了返回false,和输出流不一样,
输出流对象建立创建文件,如果文件已经存在,会覆盖。
public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了
public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来
2.删除
public boolean delete():删除文件或目录。文件存在,返回true;文件不存在或者正在被执行,返回false。
A:如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。
B:Java中的删除不走回收站。
C:要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹
void deleteOnExit(): 在程序退出时删除制定文件。

3.重命名
public boolean renameTo(File dest) :如果路径名相同,就是改名。如果路径名不同,就是改名并剪切。
4.判断
public boolean isDirectory():判断是否是目录
public boolean isFile():判断是否是文件
public boolean exists():判断是否存在
记住:在判断文件对象是否是文件或者目录时,必须要判断该文件对象封装的内容是否存在。通过exists判断。
public boolean canRead():判断是否可读
public boolean canWrite():判断是否可写
public boolean isHidden():判断是否隐藏
public boolean isAbsolute():是否绝对路径
public boolean canExecate():是否可执行
5.获取
public String getAbsolutePath():获取绝对路径
public String getPath():获取相对路径
public String getName():获取名称
public long length():获取长度。字节数
public long lastModified():获取最后一次的修改时间,毫秒值
String getParent():获取文件父目录。返回的是绝对路径中的父目录。如果获取的是相对路径,返回null。
如果相对路径中有上一层目录,那么该目录就是返回结果。

public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
调用list方法的file对象必须是封装了一个目录。该目录还必须存在。
public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
public static File [] listRoots():列出文件系统根目录;
public String[] list(FilenameFilter filter):返回一个字符串数组,获取目录中满足指定过滤器的文件或目录。
FilenameFilter:文件名过滤器,是一个接口,其中包含一个方法,accept(Filedir,String name),返回的是boolean型,对不符合条件的文件过滤掉。
public File[] listFiles(FilenameFilter filter):返回一个File数组,获取目录中满足制定过滤器的文件或目录。

练习:
判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称。
方法一:

分析:
A:封装e盘目录
B:获取该目录下所有文件或者文件夹的File数组
C:遍历该File数组,得到每一个File对象,然后判断
D:是否是文件
是:继续判断是否以.jpg结尾
是:就输出该文件名称
否:不管它
否:不管它


public class FileDemo {  
    public static void main(String[] args) {  
        // 封装e判断目录  
        File file = new File("e:\\");  

        // 获取该目录下所有文件或者文件夹的File数组  
        File[] fileArray = file.listFiles();  

        // 遍历该File数组,得到每一个File对象,然后判断  
        for (File f : fileArray) {  
            // 是否是文件  
            if (f.isFile()) {  
                // 继续判断是否以.jpg结尾  
                if (f.getName().endsWith(".jpg")) {  
                    // 就输出该文件名称  
                    System.out.println(f.getName());  
                }  
            }  
        }  
    }  
}  

[java] view plain copy

//方法二:  


  //使用文件名称过滤器,再获取时候就进行判断  
  //因为只是输出此文件名称,所以使用public String[] list();  

public class FileDemo2 {  
    public static void main(String[] args) {  
        // 封装e判断目录  
        File file = new File("e:\\");  

        // 获取该目录下所有文件或者文件夹的String数组  
        String[] strArray = file.list(new FilenameFilter() {  
            @Override  
            public boolean accept(File dir, String name) {  
                //判断是否传入的目录和名称是否是文件并且是不是.jpg结尾。  
                return new File(dir, name).isFile() && name.endsWith(".jpg");  
            }  
        });  

        // 遍历  
        for (String s : strArray) {  
            System.out.println(s);  
        }  
    }  
}  

四:递归

方法定义中调用方法本身的现象
递归注意事项:
要有出口,否则就是死递归
次数不能太多,否则就内存溢出
构造方法不能递归使用
示例一:
需求:请用代码实现求5的阶乘。
下面的知识要知道:
5! = 1*2*3*4*5
5! = 5*4!

[java] view plain copy
<pre name="code" class="java">public  DiGuiDemo{  

    public static void main(String [] arsg){  

        DiGui(5);  
    }  

        /* 
        递归要有一个方法, 
                返回值是int类型,参数列表是int n 
                出口是:if(n=1){return 1}; 
                规律是:if(n != 1) {return n*方法名(n-1);} 

        */  
    public static int  DiGui (int n){  

        if(n==1){  
            return 1;  
        if(n!=1){  

            return n*DiGui(n-1);  
            }  
        }  

    }  
}  

示例二:兔子问题(斐波那契数列)有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?第一个月:1第二个月:1第三个月:2第四个月:3第五个月:5第六个月:8…由此可见兔子对象的数据是: 1,1,2,3,5,8… 规则: A:从第三项开始,每一项是前两项之和 B:而且说明前两项是已知的

[java] view plain copy
public DiGui2{  

    public static void  mian (String[] args){  

        DiGui2(20);  
    }  
    public static int DiGui2(int n){  

        if(n ==1 || n==2){  
            return 1;  
        }else{  
            return fib(n-1)+fib(n-2);  
        }  


    }  

 }  

示例三:
需求:请大家把一个目录下所有的java结尾的文件的绝对路径给输出在控制台。

分析:
A:封装目录
B:获取该目录下所有的文件或者文件夹的File数组
C:遍历该File数组,得到每一个File对象
D:判断该File对象是否是文件夹
是:回到B
否:继续判断是否以.java结尾
是:就输出该文件的绝对路径
否:不管它

[java] view plain copy
public FilePathDemo{  
    public static void main(String [] args){  

        File f = new File("d:\\abc");  
        getFilePaths(f);  
    }  

    public static void getFilePaths(String path){  
        // 获取该目录下所有的文件或者文件夹的File数组  
        File [] fileArray = f.listFiles();  

        // 遍历该File数组,得到每一个File对象  
        for(File file :fileArray){  

            //判断是否是文件夹,是就进行递归。  
            if(file.isDirectory()){  

                getFilePaths(file);  

            }else{  
                //继续判断文件是否已.java结尾  
                if(file.getName().endWith(".java")){  


                    输出绝对路径在控制台上。  
                    System.out.println((file.getAbsolutePath());  
                }  
            }  
        }  
    }  
}  

示例四:
需求:递归删除带内容的目录

分析:
A:封装目录
B:获取该目录下的所有文件或者文件夹的File数组
C:遍历该File数组,得到每一个File对象
D:判断该File对象是否是文件夹
是:回到B
否:就删除

[java] view plain copy
public class FileDeleteDemo {  

    public static void main(String[] args) {  
        // 封装目录  
        File srcFolder = new File("demo");  
        // 递归实现  
        deleteFolder(srcFolder);  
    }  

    private static void deleteFolder(File srcFolder) {  

        // 获取该目录下的所有文件或者文件夹的File数组  
        File[] fileArray = srcFolder.listFiles();  

        if (fileArray != null) {  

            // 遍历该File数组,得到每一个File对象  
            for (File file : fileArray) {  

                // 判断该File对象是否是文件夹  
                if (file.isDirectory()) {  

                    deleteFolder(file);  

                } else {  

                    System.out.println(file.getName() + "---" + file.delete());  
                }  
            }  

            System.out  
                    .println(srcFolder.getName() + "---" + srcFolder.delete());  
        }  
    }  
}  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值