黑马程序员--java基础之IO流(二)

File体系概况:

    1、可以将已有的或者未出现的文件或者文件夹封装成一个对象;

        练习一:File构造函数的演示

                     File 中有个特有的跨平台方法,是用来替换分隔符的,static String separator

                     也就是说"\\"可以用File.separator()来替换

1
2
3
4
5
6
7
8
9
10
class FileTest{
    public static void main(String [] args){
        File f1 = new File("E:\\workspace\\","***.java");//构造函数一:File(String parent, String child)
            
        File f2 = new File("***.java");                  //构造函数二:File(String pathname)
            
        File dir = new File("E:\\workspace\\");          //构造函数三:File(File parent, String child)
        File f3 = new File(d,"***.java")
    }
}

练习二:File中的常见方法演示

    1、创建

         |--boolean createNewFile();会发生异常IOException.

             在指定位置创建文件,如果文件存在则返回false

             与输出流不同,输出流一旦建立对象,就会创建文件,如果存在则会覆盖;

        |--static File createTempFile(String prefix, String suffix);可以创建一个临时文件

        |--boolean mkdir();创建目录

        |--boolean mkdir();创建多级目录

    2、删除

        |--boolean delete();删除未成功,返回false;

        |--deleteOnExit(); 在程序退出时删除文件;

    3、判断

        |--boolean exists();判断文件是否存在;

        |--isDirectory();在调用该方法时必须先调用上一方法;

        |--isFile();在调用该方法时必须先调用上一方法;

        |--isHidden();

        |--isAbsolute();判断是否是绝对路径

    4、获取

        |--getName();

        |--String getParent()该方法返回的是文件的绝对路径中的父目录,或是该文件所在的上一层目录,如果File对象中没指定绝对路径或者上一层目录,   返回null;

        |--getPath();File对象中封装的是什么路径就获取什么路径;

        |--File getAbsoluteFile()返回此抽象路径名的绝对路径名形式。          

        |--String getAbsolutePath()  返回此抽象路径名的绝对路径名形式。

        |--renameTo(File f);改名

        |--static File[] listRoots() 列出可用的文件系统根。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class FileTest{
    public static void main(String [] args){
        File file = new File("hehe.java");
        try
        {
            System.out.println(file.createNewFile());//创建并返回boolean
            System.out.println(file.delete());
        }
        catch (IOException e)
        {
            System.out.println(e.toString());
        }
           
    }
}

练习三:打印c盘文件下的目录

       提示:用到list方法,返回一个字符串数组,用高级for循环读取;

                  一般用listFiles方法,返回的是File对象,可以调用File的方法

1
2
3
4
5
6
7
8
9
10
class FileTest
{
    public static void main(String [] args){
        File file = new File("C:\\");//将目录封装成对象,可以返回目录下的所有文件名;
        String [] str = file.list();
        for(String name:str){
            System.out.println(name);
        }
    }
}

 

练习四:打印一个目录下所有的java文件

        提示:用到list(Filefilter filter)方法,返回字符串数组,参数为一个自定义过滤器

                  一般用listFiles(Filefilter filter)方法,该方法返回的是File对象,可以调用File中的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class FileTest
{
    public static void main(String [] args){
        File dir = new File("E:\\workspace\\notes\\");
        String [] names = dir.list(new FilenameFilter()
        {
            public boolean accept(File dir, String name)
            {
                return name.endsWith(".java");                     
            }
        });
        for(String name:names){
            System.out.println(name);
        }
    }
}

练习五:打印出该目录下所有文件和文件夹,包括子文件夹,带层次;

      提示:1、目录中如果有子目录,就会继续进去遍历,用到的还是原来的方法,所以直接调用本方法,该编程方法为递归法

                 2、用递归法时需要注意条件的限定,不然容易出现内存溢出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class FileTest
{
    public static void main(String [] args)
    {
        File dir = new File("E:\\workspace\\");
        showDir(dir,0);
    }
    public static String getLevel(int level)
    {
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<level; i++)
        {
            sb.append("  ");
        }
        return sb.toString();
    }  
    public static void showDir(File dir,int level)
    {
        System.out.println(getLevel(level)+ dir.getName());
        File [] files = dir.listFiles();
        level++;
        for(int i=0; i<files.length; i++)
        {          
            if(files[i].isDirectory())
                showDir(files[i],level);
            else
                System.out.println(getLevel(level)+files[i]);
        }
    }
}

练习六:将指定目录下的所有.java文件生成一个目录列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
class FileTest
{
    public static void main(String [] args)
    {
        //将目录封装成对象
        File dir = new File("E:\\workspace\\");
        //创建一个列表存放目录
        List<File> list = new ArrayList<File>();
        //调用自定义方法将文件目录写到列表
        fileToList(dir,list);
        //调用自定义方法将目录写到本地文本
        writeToFile(list, "java.txt");
        
    }
    public static void fileToList(File dir,List<File> list)
    {      
        //获取File对象
        File [] files = dir.listFiles();
        //高级循环遍历
        for(File file : files){
            if(file.isDirectory())
                fileToList(file,list);
            else{
                if(file.getName().endsWith(".java"))
                    list.add(file);
            }              
        }      
    }
    public static void writeToFile(List<File> list, String txt){
        BufferedWriter bw = null;
        try
        {
            //输出流写入文本
            bw = new BufferedWriter(new FileWriter(txt));
            for(File f : list){
                String path = f.getAbsolutePath();
                bw.write(path);
                bw.newLine();
                bw.flush();
            }
 
        }
        catch (IOException e)
        {
            System.out.println(e.toString());
        }
        finally{
            try
            {
                if(bw == null)
                    bw.close();
            }
            catch (IOException e)
            {
                System.out.println(e.toString());
            }
        }
    }
}
posted @ 2013-04-06 00:09  郭彦君  阅读(150)  评论(0编辑  收藏  举报