JAVA基础——File

                                File

一、什么是File类?
File类就是Java中对文件这类事物的描述,Field类对象可以代表一个路径,该路径可以是文件也可以是文件夹,该类方法可以对这个路径进行各种操作
二、创建Field对象的格式
File f = new File(“file.txt”);
File对象的路径:
1、绝对路径:从 盘符开始,是一个固定路径
2、相对路径:不从盘符开始,相对于某个位置,在 Eclipse中如果使用相对路径,则相当于工程根目录,cmd中则相当于当前目录
常用方法:

创建: 
*****createNewFile()        创建文件 
*****mkdir();               创建文件夹(仅一级) 
*****mkdirs();              创建文件夹(父级不存在也创建) 

判断: 
*****boolean exists()       判断是否存在 
boolean isAbsolute();       是否是绝对路径 
*****boolean isDirectory(); 是否是文件夹 
*****boolean isFile();      是否是文件 
boolean isHidden();         是否是隐藏文件 
canExecute();               是否可执行 

获取: 
getAbsolutePath();          获取绝对路径 
*****getParent());          获取父级路径 
*****getName());            获取文件或文件夹名 
*****length()               文件大小 
*****lastModified();        获取文件的最后修改时间 
getFreeSpace();             获取当前盘符剩余空间 
getTotalSpace();            获取当前盘符总空间 
getUsableSpace();           获取当前盘符可用空间  

删除: 
*****delete();              删除, 文件可以直接删除, 文件夹只能删空的 
*****deleteOnexit();        在程序退出时删除文件

剪切: 
**renameTo();               改名, 可以移动文件 

比较特殊的方法: 
File[] listRoots()          列出计算机中所有的盘符 
String[] list()             返回指定目录下的所有文件及目录(文件须存在) 
*****File[] listFiles()     返回指定目录下的所有文件及目录 

练习:
递归使用:
注意限定条件,递归出口
注意递归次数,避免内存溢出

1.列出指定文件夹下的所有文件

 public static void main(String[] args)   
        {  

            File file = new File("d:\\");  
            if(file.exists()){  
                if(file.isDirectory())  
                    show(file);  
            }
  }  

        public static void show(File file){  
            File [] files = file.listFiles();  
            System.out.println(file);  
            for(int i=0;i<files.length;i++){  
                if(files[i].isDirectory()){  
                    show(files[i]);  
                } else
                    System.out.println(files[i]);  
            }  
    }
    注:这里本人有个小疑惑,为什么会报空指针异常。别人考代码去运行没问题,有点崩溃。猜测是系统在使用目录下的文件,导致不可读。
    问题解决:当遍历到的文件夹是空的话,files.lenth就会报空指针异常。只需要在 for(int i=0;i<files.length;i++)前加上判断语句(if(files!=null)).

2.将文件路径存放到一个文件中

/**将文件路径存放到一个文件中
     * 思路:
     * 1.遍历一个文件夹下的所有文件
     * 2.将文件装入一个集合
     * 3.遍历集合的元素一一写到一个文件中
     */

    public static void main(String[] args) throws Exception {
        File file = new File("d:\\jdk");
        List<File> list = new ArrayList<File>();
        show(file, list);
        BufferedWriter bw = new BufferedWriter(new FileWriter("c:\\ab.txt"));
//      char[] cbuf = new char[1024*2];
        for(File f:list) {
            bw.write(f.getAbsolutePath());
            bw.newLine();
            bw.flush();
        }

    }

     public static void show(File file,List<File> list){  
            File [] files = file.listFiles(); 
            //加入根目录 
            list.add(file);
            System.out.println(file);  
            for(int i=0;i<files.length;i++){  
                if(files[i].isDirectory()){  
                    show(files[i],list);  
                } 
                else
                    list.add(file);  
            }  
    }

3.删除一个非空的文件夹

/**
     * 思路:删除文件夹需要先删除文件夹下面的文件
     * 1.递归遍历文件夹下我文件,
     * 2.删除文件
     * 3.删除根文件夹
     */
    public static void main(String[] args) {
        File dir = new File("d:\\day01");
        if(dir.exists()) {
            if(dir.isDirectory())
                delete(dir);
        }

    }
    public static void delete(File dir) {
        File[] files = dir.listFiles();
        for(int i=0;i<files.length;i++) {
            if(files[i].isDirectory())
                delete(files[i]);
            files[i].delete();
        }
        dir.delete();
    }

4.将一个文件下的所有.java文件打印在在控制台

/** 思路:
     * 1.遍历一个文件夹
     * 2.使用Filefilter,实现其accept方法,过滤指定后缀文件
     */
    public static void main(String[] args) throws Exception {
        File dir = new File("E:\\黑马毕向东\\源代码\\day02");
        String filtername = ".java";
        if(dir.isDirectory())
            fileFilter(dir, filtername);
    }

    public static void fileFilter(File dir,final String filterName) throws Exception {
        File[] files = dir.listFiles(new FilenameFilter(){

            public boolean accept(File dir, String name) {

                return name.endsWith(filterName);
            }} );

        for(int i=0;i<files.length;i++) {
            if(files[i].isDirectory())
                fileFilter(files[i],filterName);
            System.out.println(files[i]);
        }
    }

、Properties概述
Properties是HashTable的子类,用来存储键值对,可以用来作为配置文件(文件中必须是k=v)。是集合中和IO技术相结合的容器。

Properties的方法:

load(InputStream):通过流加载配置文件到集合中
Store(OutputStream,String):将内存对集合的改变写到配置文件中,将集合的数据写入到文件中,String使用来添加注释的,不会被解析
setPropertity(key,value),getProperty():
Set stringPropertyNames():

练习;
1.限制程序运行次数,当运行次数到达5次时,给出请您注册的提示。并不再让该程序执行。

public static void main(String[] args) throws Exception  
    {  
        File file = new File("count.properties");  
        //如果文件不存在,则新建文件  
        if(!file.exists())  
            file.createNewFile();  
        runNum(file);  
    }  
    public static void runNum(File file)throws Exception{  
        //定义一个持久属性集  
        Properties pro = new Properties();  
        BufferedReader bufr = null;  
        BufferedWriter bufw = null;  
        try  
        {  
            //定义读取流并与文件关联  
            bufr = new BufferedReader(new FileReader(file));  
            //定义输出流并与文件关联  
            bufw = new BufferedWriter(new FileWriter(file));  
            //将流中的数据加载进集合  
            pro.load(bufr);  
            //获取用户登录次数  
            String countValue = pro.getProperty("count");  
            int count = (countValue==null)?1:((Integer.parseInt(countValue)));  
            //判断  
            if(countValue==null){  
                System.out.println("首次使用本程序,信誉度+1");  
            }  
            else  
                if(count<5)  
                    System.out.println("这是您第"+count+"次使用本程序,您还剩余"+(5-count)+"次机会");  
                else{  
                    System.out.println("您的使用次数已达上限,请登录XXX重新注册");  
                    return;  
                }  
            count++;  
            //根据键修改次数  
            pro.setProperty("count",count+"");  
            //把新数据写入文件  
            pro.store(bufw,"使用次数已更改");  
        }  
        catch (IOException e)  
        {  
            throw new RuntimeException();  
        }  
        finally{  
            try  
            {  
                if(bufr!=null)  
                    bufr.close();  
            }  
            catch (IOException e)  
            {  
                throw new RuntimeException();  
            }  
            finally{  
                try  
                {  
                    if(bufw!=null)  
                        bufw.close();  
                }  
                catch (IOException e)  
                {  
                    throw new RuntimeException();  
                }  
            }  
        }  
    }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值