您的位置:首页 > 职场人生

黑马程序员_JAVA笔记之(File类,过滤器,递归练习)

2015-10-14 22:15 513 查看
------- android培训、java培训、期待与您交流!----------

File类.过滤器.递归练习

一.文件路径

绝对路径:真正文件存在的从盘符开始的物理路径

相对路径:

从day目录下到Demo.java,要经历的路径:src/cn/itcast2/Demo.java

必须有参考标准,是相对的概念

在Eclipse的JAVA项目当中,默认的参照路径是工程路径,即项目的根目录

二.File类

File类: 文件和目录路径名的抽象表示形式。 即,不是文件,是文件或者文件夹的路径。而最终通过该路径找到对应的文件或者文件夹

构造方法:

public File(String pathname)  通过路径名创建文件对象

public File(String parent,String child)  父亲:该文件或者文件夹所在的文件夹---孩子:文件或者文件夹本身

public File(File parent, String child)  与上边的构造方法相同

代码演示:

[java] view plaincopy

package cn.itcast2;  

  

import java.io.File;  

  

public class Demo2 {  

  

    public static void main(String[] args) {  

  

        //构造方法一  

        File file = new File("a/b.txt");  

        File file2 = new File("day\\a\\b.txt");  

          

        System.out.println("=================文件夹的构造");  

        File dirParent = new File("a");  

        File dirChild = new File("a/b");  

        //构造方法二  

        File dirChild2 = new File("a","b");  

        //构造方法三  

        File dirChild3 = new File(dirParent,"b");  

          

        System.out.println("=====================文件的构造");  

        File fileParent = new File("a");  

        File fileChild = new File("a/b.txt");  

          

        //构造方法二  

        File fileChild2 = new File("a","b.txt");  

        //构造方法三  

        File fileChild3 = new File(fileParent,"b.txt");  

    }  

  

}  

File类的普通方法:

创建File对象并没有创建文件,如果需要创建文件的话,需要调用方法。

public boolean createNewFile() throws IOException  创建文件,文件已经存在,则不能再创建

public boolean mkdir()  创建文件夹     

注意事项:文件与文件夹同样不能重名

public boolean mkdirs() 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录.路过的所有文件夹顺带全部创建

代码演示:

[java] view plaincopy

package cn.itcast2;  

  

import java.io.File;  

import java.io.IOException;  

public class Demo3 {  

  

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

  

        //创建一个文件  

        File file = new File("b.txt");  

        boolean createNewFile = file.createNewFile();  

        System.out.println(createNewFile);  

        //创建一个文件夹  

        File file2 = new File("b");  

        boolean mkdir = file2.mkdir();  

        System.out.println(mkdir);  

        //文件夹可以有扩展名,但是没有意义.同样的,文件也可以没有扩展名  

        File file3 = new File("c.txt");  

        file3.mkdir();  

          

        //创建文件对象,其所有的文件夹都必须已经存在,则报错  

//      File file4 = new File("d/e/f/g/h.txt");  

//      file4.createNewFile();  

          

        //创建文件夹对象,其所有的文件夹如果不存在,不会报错,但是不会创建成功  

        File file4 = new File("d/e/f/g/h");  

        boolean mkdir2 = file4.mkdir();  

        System.out.println(mkdir2);  

          

        //创建文件夹对象,其所有的文件夹如果不存在,调用加S的方法,可以顺便将所有路过文件夹全部创建  

        File file5 = new File("d/e/f/g/h");  

        boolean mkdir3 = file5.mkdirs();  

        System.out.println(mkdir3);  

          

    }  

  

}  

File类的删除与判断方法

public boolean delete() 删除文件

public boolean isDirectory() 判断是否为文件夹

public boolean isFile() 判断是否为文件

public boolean isHidden() 判断是否为隐藏文件

public boolean exists()  判断文件是否存在

代码演示:

[java] view plaincopy

package cn.itcast2;  

  

import java.io.File;  

import java.io.IOException;  

  

public class Demo4 {  

  

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

  

        File file = new File("b.txt");  

        file.createNewFile();  

//      System.out.println(file.delete());  

          

        System.out.println(file.exists());  

        System.out.println(file.isDirectory());  

        System.out.println(file.isFile());  

        System.out.println(file.isHidden());  

    }  

  

}  

File类删除文件夹

删除文件夹时,文件夹必须已经清空了.

即只能删除空文件夹

代码演示:

[java] view plaincopy

package cn.itcast2;  

  

import java.io.File;  

public class Demo5 {  

  

    public static void main(String[] args) {  

  

        File file = new File("d.txt");  

        System.out.println(file.delete());  

          

        File file2 = new File("d/e/f/g/h");  

        System.out.println(file2.delete());  

    }  

  

}  

File类的获取功能:

public String getAbsolutePath()  获取绝对路径

public String getPath()  获取路径

public String getParent()  获取其所在的文件夹

public File getParentFile()  获取其所在的文件夹的文件对象

public String getName()  获取文件名

public long lastModified()  获取其文件的最后修改时间

public long length()  获取文件大小(字节数)  数字或者英文字符都是1个字节  汉字使用GBK码表2个字节

代码演示:

[java] view plaincopy

package cn.itcast2;  

  

import java.io.File;  

import java.util.Date;  

public class Demo6 {  

  

    public static void main(String[] args) {  

          

        File file = new File("b.txt");  

        File file2 = new File("day\\b.txt");  

          

        System.out.println(file.getAbsolutePath());  

        System.out.println(file2.getAbsolutePath());  

          

[java] view plaincopy

<span style="white-space:pre">        </span>System.out.println("==================");  

        System.out.println(file.getPath());  

        System.out.println(file2.getPath());  

          

[java] view plaincopy

<span style="white-space:pre">        </span>System.out.println("==================");  

        System.out.println(file.getParent());  

        System.out.println(file2.getParent());  

          

[java] view plaincopy

<span style="white-space:pre">        </span>System.out.println("==================");  

        System.out.println(f
4000
ile.getParentFile());  

        System.out.println(file2.getParentFile());  

          

[java] view plaincopy

<span style="white-space:pre">        </span>System.out.println("==================");  

        System.out.println(file.getName());  

        System.out.println(file2.getName());  

          

[java] view plaincopy

<span style="white-space:pre">        </span>System.out.println("==================");  

        System.out.println(new Date(file.lastModified()));  

        System.out.println(file2.lastModified());  

          

[java] view plaincopy

<span style="white-space:pre">        </span>System.out.println("==================");  

        System.out.println(file.length());  

        System.out.println(file2.length());  

    }  

  

}  

File类的高级获取功能:

public static File[] listRoots()  列出可用的文件系统根.

public String[] list()  返回一个字符串数组  内容为该目录中的文件和目录   即该列出该目录下的所有内容

public File[] listFiles()  返回一个文件对象数组  内容为该目录中的文件和目录   即该列出该目录下的所有内容

代码演示:

[java] view plaincopy

package cn.itcast2;  

  

import java.io.File;  

  

public class Demo7 {  

  

    public static void main(String[] args) {  

  

        File[] listRoots = File.listRoots();  

          

        for (File file : listRoots) {  

            System.out.println(file);  

        }  

        System.out.println("==================");  

          

          

        File dir = new File("d");  

          

        String[] list = dir.list();  

          

        for (String string : list) {  

            System.out.println(string);  

        }  

          

        System.out.println("==================");  

          

          

        File dir2 = new File("d");  

          

        File[] listFiles = dir2.listFiles();  

          

        for (File file : listFiles) {  

            System.out.println(file.getName());  

        }  

    }  

  

}  

File类的renameTo方法

public boolean renameTo(File dest) 重新命名此抽象路径名表示的文件.

同一目录下:就是单纯的重命名

不同目录下:先删除本文件,再创建新文件,文件内容相同.实际上就是剪切的动作.

代码演示:

[java] view plaincopy

package cn.itcast;  

  

import java.io.File;  

  

public class Demo {  

  

    public static void main(String[] args) {  

          

        //创建要改名的File对象  

        //创建被改成的File对象  

        File file = new File("a.txt");  

        File file2 = new File("b.txt");  

          

        boolean renameTo = file.renameTo(file2);  

        System.out.println(renameTo);  

          

        //创建要改名的File对象  

        //创建被改成的File对象  

        File file3 = new File("b.txt");  

        File file4 = new File("c/c.txt");  

          

        boolean renameTo2 = file3.renameTo(file4);  

        System.out.println(renameTo2);  

    }  

}  

三.FilenameFilter:文件名过滤器

public File[] listFiles(FilenameFilter filter) 表示的目录中满足指定过滤器的文件和文件夹

自己理解:即调用该方法的目录,会将该目录中的每一个文件或者文件夹都经过过滤器的判断.

如果满足条件就返回到数组中,不满足条件,就不返回.

代码演示:

[java] view plaincopy

package cn.itcast;  

  

import java.io.File;  

import java.io.FilenameFilter;  

  

public class Demo2 {  

  

    //需求:返回该目录下所有以.java结尾的文件  

    public static void main(String[] args) {  

  

        //创建文件夹的文件对象  

        File file = new File("zzz");  

          

        File[] listFiles = file.listFiles(new FilenameFilter() {  

              

            //该方法是用来判断文件名的  

            @Override  

            public boolean accept(File dir, String name) {  

                //dir:该文件所在的文件夹  

                //name:该文件的文件名  

                  

                //将该文件对象创建出来  

                File thisFileorDIR = new File(dir,name);  

                  

                //判断是否为文件  

                if(thisFileorDIR.isFile()) {  

                    //判断文件名是否以java结尾  

                    if(name.endsWith(".java")) {  

                        return true;  

                    }  

                }  

                  

                return false;  

            }  

        });  

          

          

        //遍历过滤之后的数组  

        for (File file2 : listFiles) {  

            String absolutePath = file2.getAbsolutePath();  

            System.out.println(absolutePath);  

        }  

    }  

  

}  

四.递归思想

递归算法:

方法内调用自身方法

递归算法所在函数内,必须有函数出口.即必须告知不再递归的方法什么时候结束

递归次数不能过多

会导致,StackOverflowError:栈内存溢出

代码演示:

[java] view plaincopy

package cn.itcast;  

  

public class Demo3 {  

  

    public static void main(String[] args) {  

          

        method(0);  

    }  

      

    public static void method(int number) {  

        number++;  

        System.out.println(number);  

          

        //必须有递归的函数出口  

        if(number>10){ //递归次数不宜过多  

            return;  

        }  

        //递归方法中必须有自己调用自己  

        method(number);  

    }  

  

}  

代码演示练习1:

需求:使用递归求1-10的和

[java] view plaincopy

package cn.itcast;   

public class Demo4 {  

  

    public static void main(String[] args) {  

  

        System.out.println(getSum(365));  

    }  

  

    public static int getSum(int number) {  

  

        //函数出口  

        if(number == 1) {  

            return 1;  

        }  

          

        //每次使用这个数本身       加上         1-比该数小1的数的和  

        return number + getSum((number-1));  

    }  

}  

代码演示练习2:

需求:求斐波那契数列

[java] view plaincopy

package cn.itcast;  

/* 

 * 求斐波那契数列 

 * 给定第几个数,  求这第几个数的值是多少 

 * index :1 2 3 4 5 6 7 ... 

 * 返回值      :1 1 2 3 5 8 13 ...     

 * 规律:第三个数是前两个数的和 

 *  

 * 第一个数,第二个数均不符合斐波那契数列规律 

 *  

 * 求第4个数 

 *     求第3个数                                                         +                       求第2个数 

 *            求第2个数       +   求1个数 

 *  

 * 求第5个数 

 *          求第4个数                                                                                                                     +              求第3个数 

 *           求第3个数              +         求第2个数                                                                                                     求第2个数   +   求第1个数 

 *           求第2个数   + 求第1个数 

 *  

 *  

 * 出口:  当数为第1个或者第2个时,直接返回1 

 *  

 */  

public class Demo6 {  

  

    public static void main(String[] args) {  

  

        System.out.println(method(7));  

    }  

    //告诉我你要第几个数,我把这个数的值返回  

    public static int method(int index) {  

        //出口:  当数为第1个或者第2个时,直接返回1  

        if(index==1||index==2) {  

            return 1;  

        }  

        //规律:第三个数是前两个数的和  

        int before = index-1;  

        int beforeBofore = index-2;  

          

        return method(before) + method(beforeBofore);  

    }  

  

}  

版权声明:本文为博主原创文章,未经博主允许不得转载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: