黑马程序员_IO流_File类的使用

来源:互联网 发布:为知笔记导出到有道 编辑:程序博客网 时间:2024/04/30 02:00

------------------------------android培训、java培训、期待与您交流!----------------------------------------------------------------

 

 

File

 

用来将文件或者文件夹封装成对象

方便对文件与文件夹的属性信息进行操作

 File对象可以作为参数传递给流的构造函数。

了解File类中的常用方法。

 

 

需求:创建File对象,创建文件.

       public static void consMethod()

       {

              //将a.txt封装成file对象。可以将已有的和为出现的文件或者文件夹封装成对象。

              File f1 = newFile("a.txt");

              File f2 = newFile("c:\\abc","b.txt");

 

              File d = newFile("c:\\abc");

              File f3 = newFile(d,"c.txt");

 

              sop("f1:"+f1);

              sop("f2:"+f2);

              sop("f3:"+f3);

 

              File f4 = new File("c:"+File.separator+"abc"+File.separator+"zzz"+File.separator+"a.txt");//能实现跨平台性.

static String

separator
          与系统有关的默认名称分隔符,出于方便考虑,它被表示为一个字符串。

 

       }

 

       public static void sop(Object obj)

       {

              System.out.println(obj);

       }

}

 

 

File类常见方法:

1,创建。

       boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false。

       和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。

 

       boolean mkdir():创建文件夹。只有一级目录.

       boolean mkdirs():创建多级文件夹。

2,删除。

       boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回falsel。

       void deleteOnExit();在程序退出时删除指定文件。

 

3,判断。

       boolean exists() :文件是否存在.

       isFile():

       isDirectory();

       isHidden();

       isAbsolute();

 

4,获取信息。

       getName():

       getPath():

       getParent():

       getAbsolutePath()

       long lastModified()

       long length()

File

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

 String

getAbsolutePath()
          返回抽象路径名的绝对路径名字符串。

 

 

需求:用代码演示以上File类上的方法:

 

classFileDemo

{

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

       {

              method_3();

       }

 

publicstatic void method_3()throws IOException

       {

              File f = newFile("d:\\java1223\\day20\\file2.txt");

 

              //f.createNewFile();

 

              //f.mkdir();创建目录

 

              //记住在判断文件对象是否是文件或者目的时,必须要先判断该文件对象封装的内容是否存在。

              //通过exists判断。

              sop("dir:"+f.isDirectory());

              sop("file:"+f.isFile());

 

              sop(f.isAbsolute());//是不是绝对路径.

       }

 

       public static void method_4()

       {

              File f = newFile("file.txt");

 

              sop("path:"+f.getPath());

              sop("abspath:"+f.getAbsolutePath());

              sop("parent:"+f.getParent());

              //该方法返回的是绝对路径中的父目录。如果获取的是相对路径,返回null。

              //如果相对路径中有上一层目录那么该目录就是返回结果

       }

 

public static void listRootsDemo()//功能是列出系统里的盘符

       {

              File[] files = File.listRoots();

 

              for(File f : files)

              {

                     System.out.println(f);

              }

       }

 

public static void listDemo()//列出当前目录下所有文件.

       {

              File f = new File("c:\\abc”);

 

              String[] names = f.list();

              //调用list方法的file对象必须是封装了一个目录。该目录还必须存在。

              for(String name : names)

              {

                     System.out.println(name);

              }

       }

 

       public static void listDemo_2() //取出指定目录下d:\\java1223\\day18的指定文件类型的文件.

       {

              File dir = newFile("d:\\java1223\\day18");

 

              String[] arr = dir.list(new FilenameFilter()//定义一个匿名内部类.

              {

                     publicboolean accept(File dir,String name)

                     {

 

                            //System.out.println("dir:"+dir+"....name::"+name);

                            /*

                            if(name.endsWith(".bmp"))

                                   return true;

                            else

                            return false;

                            */

                            returnname.endsWith(".bmp");

 

                     }

              });

 

              System.out.println("len:"+arr.length);

              for(String name : arr)

              {

                     System.out.println(name);

              }

       }

String[]

list()
          返回由此抽象路径名所表示的目录中的文件和目录的名称所组成字符串数组。

 File[]

listFiles()   返回的是对象
          返回一个抽象路径名数组,这些路径名表示此抽象路径名所表示目录中的文件。

publicstatic void main(String[] args) //拿出当前目录下的文件

       {

              File dir = newFile("c:\\");

              File[] files = dir.listFiles();

 

              for(File f : files)

              {

                     System.out.println(f.getName()+"::"+f.length());

              }

 

             

       }

}

需求: 列出当前目录下及子目录下的所有内容-递归

列出指定目录下文件或者文件夹,包含子目录中的内容。

也就是列出指定目录下所有内容。

 

因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。

在列出过程中出现的还是目录的话,还可以再次调用本功能。

也就是函数自身调用自身。

这种表现形式,或者编程手法,称为递归。

 

递归要注意:

1,限定条件。

 

2,要注意递归的次数。尽量避免内存溢出。

importjava.io.*;

 

classFileDemo3

{

       public static void main(String[] args)

       {

              File dir = newFile("d:\\testdir");

              //showDir(dir,0);

 

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

       }

       public static String getLevel(int level)

       {

              StringBuilder sb = newStringBuilder();

              sb.append("|--");

              for(int x=0; x<level; x++)

              {

                     //sb.append("|--");

                     sb.insert(0,"|  ");

 

              }

              return sb.toString();

       }

       public static void showDir(File dir,int level)

       {

             

              System.out.println(getLevel(level)+dir.getName());//打印下目录的完整路径.

 

              level++;

              File[] files = dir.listFiles();

              for(int x=0; x<files.length;x++)

              {

                     if(files[x].isDirectory())

                            showDir(files[x],level);

                     else

                            System.out.println(getLevel(level)+files[x]);

              }

       }

 

 

递归运算的最简单实现:

publicstatic void toBin(int num)

       {

              if(num>0)

              {

                     toBin(num/2);

                     System.out.println(num%2);

                     // num = num/2;

              }

       }

 

需求: 删除一个带内容的目录。

 

删除原理:

在window中,删除目录从里面往外删除的。

既然是从里往外删除。就需要用到递归。

 

importjava.io.*;

class  RemoveDir

{

       public static void main(String[] args)

       {

             

              File dir = newFile("d:\\testdir");

              removeDir(dir);

       }

 

       public static void removeDir(File dir)

       {

              File[] files = dir.listFiles();

             

              for(File file : files)

              {

                     if(!files[x].isHidden()&&files[x].isDirectory())

                            removeDir(files[x]);

                     else

                            System.out.println(files[x].toString()+":-file-:"+files[x].delete());//删除文件判断是否删除成功. 当误删除操作时出现false.

             

 String

toString()
          返回此抽象路径名的路径名字符串

 

              }

 

              System.out.println(dir+"::dir::"+dir.delete());//删除文件夹.

 

       }

 

}

 

需求: 建立一个java文件列表文件。

将一个指定目录下的java文件的绝对路径,存储到一个文本文件中。

1,对指定的目录进行递归。

2,获取递归过程所有的java文件的路径。

3,将这些路径存储到集合中。

4,将集合中的数据写入到一个文件中。

importjava.io.*;

importjava.util.*;

class  JavaFileList

{

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

       {

             

              File dir = newFile("d:\\java1223");

 

              List<File> list = newArrayList<File>();

 

              fileToList(dir,list);

 

              //System.out.println(list.size());

 

              Filefile = new File(dir,"javalist.txt");//文件创建到d:\\java1223中.

              writeToFile(list,file.toString());//file对象的字符串形式是绝对路径.,  返回此抽象路径名的路径名字符串。

 

       }

       public static void fileToList(File dir,List<File> list)//j将文件存到集合中,这方法要在里面递归,

       {

              File[] files = dir.listFiles();

 File[]

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,StringjavaListFile)throwsIOException//将集合中的数据存储到文本文件中.

       {

              BufferedWriterbufw =  null;//try外面定义.

              try

              {

                     bufw = newBufferedWriter(new FileWriter(javaListFile));

                    

                     for(File f : list)

                     {

                            String path =f.getAbsolutePath();

                            bufw.write(path);

                            bufw.newLine();// 写入一个行分隔符。

                            bufw.flush();

                     }

 

              }

              catch (IOException e)

              {

                     throw e;

              }

              finally

              {

                     try

                     {

                            if(bufw!=null)

                                   bufw.close();

                     }

                     catch (IOException e)

                     {

                            throw e;//不处理,让调用此方法的对方 处理.

                     }

              }

       }

}

 

 

 

 

 

 

 

 

 

 

 

 

-----------------------------android培训java培训期待与您交流!----详细请查看:http://edu.csdn.net/heima---------------

原创粉丝点击