Chinaunix首页 | 论坛 | 博客
  • 博客访问: 232251
  • 博文数量: 75
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 848
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-08 10:27
文章分类
文章存档

2014年(9)

2013年(66)

我的朋友

分类: Java

2013-12-28 16:55:45

File类

文件和目录路径名的抽象表示形式。

用来将文件或者文件夹封装成对象;方便对文件与文件夹的属性信息进行操作。
File对象可以作为参数传递给流的构造函数。
了解File类中的常用方法。

File类常用方法
1,创建
boolean createNewFile();
当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
在指定位置创建文件,如果文件已经存在,则不创建返回false 
与输出流不同:输出流对象创建文件时,如果文件已经存在,会覆盖原有文件
boolean mkdir();//创建文件夹
boolean mkdirs();//创建多级文件夹
2,删除 boolean delete();删除成功返回true ;失败返回false
void deleteOnExit();在程序退出时删除指定文件
3,判断 boolean canExecute(); 测试应用程序是否可以执行此文件。可以和Runtime类配合使用
exists();文件或目录是否存在。
在判断文件对象是否是文件或者目的时,必须要先判断该对象封装的内容是否存在
isFile();  判断是否是文件,
isDirectory();是否是目录
isHidden();  是否隐藏
isAbsolute();是否绝对路径
4,获取信息
getName();
getPath();获取相对路径字符串
getParent();返回绝对路径的父目录,相对路径没有父目录,则返回null,如果有上层目录,那么该目录就是返回结果
getAbsolutePath();//抽象路径名的绝对路径名字符串
lastModified();//返回文件最后一次被修改的时间
length();  文件大小
5,修改信息
renameTo(File f);修改文件名称及路径,成功则返回true

示例:


  1. import java.io.*;  
  2. class FileDemo   
  3. {  
  4.     public static void main(String[] args)  throws IOException  
  5.     {  
  6. //      consMethod();  
  7.         method_5();  
  8.     }  
  9.     public static void method_5()  
  10.     {  
  11.         File f1 = new File("c:\\Demo.java");  
  12.         File f2 = new File("G:\\haha.java");  
  13.         sop("renameTo: "+f1.renameTo(f2));//改文件名及路径  
  14.     }  
  15.     public static void method_4()  
  16.     {  
  17.         File f = new File("G:\\a.txt");  
  18.         sop("path: "+ f.getPath());//获取相对路径  
  19.         sop("absolutePath: "+f.getAbsolutePath());//获取绝对路径  
  20.         sop("parent: "+f.getParent());//返回绝对路径的父目录,相对路径没有父目录,则返回null  
  21.     }                               //如果相对路径中有上层目录,那么该目录就是返回结果  
  22.     public static void method_3() throws IOException  
  23.     {  
  24.         File f = new File("file.txt");    
  25.         f.createNewFile();//创建文件  
  26.         f.mkdir();      //创建目录,名称为file.txt的文件夹  
  27.         sop("dir: "+ f.isDirectory());//在判断文件对象是否是文件或者目的时,必须要先判断该对象封装的内容是否存在  
  28.         sop("file: "+ f.isFile());      //通过exist()判断  
  29.     }  
  30.     public static void method_2()  
  31.     {  
  32.         File f = new File("file.txt");  
  33. //      sop("execute: "+f.canExecute());//判断是否能执行  
  34. //      sop("exists: "+f.exists());     //判断是否存在  
  35.         File dir = new File("abc\\fd\\df\\df");     //创建抽象路径对象  
  36.         sop("mkdirs: "+dir.mkdirs());               //根据该对象创建文件夹  
  37.     }  
  38.     public static void method_1() throws IOException  
  39.     {  
  40.         File f = new File("file.txt");  
  41.         f.deleteOnExit();   //在程序退出时删除指定文件  
  42. //      sop("creat: "+ f.createNewFile());//1,创建成功返回true,如果文件已存在返回false  
  43.         sop("delete:"+f.delete());      //2,删除,成功删除返回true,失败返回false  
  44.     }  
  45.     public static void consMethod() //构造方法演示  
  46.     {                   //file可以将已有的和未出现的文件或者文件夹封装成对象  
  47.         File f1 = new File("a.txt");//将a.txt封装成file对象,  
  48.         File f2 = new File("G:\\haha","b.txt");  
  49.         File d  = new File("c:\\haha");//将目录和文件拆分,可以更加自由的定义  
  50.         File f3 = new File(d,"c.txt");  
  51.         sop("f3: "+f3);  
  52.         File f4 = new File("c:"+File.separator+"haha"+File.separator+"abc"+"a.txt");  
  53.     }                   //使用跨平台的分隔符seprator,增强代码健壮性  
  54.     public static void sop(Object obj){  
  55.         System.out.println(obj);  
  56.     }  
  57. }  

文件列表

获取文件列表的方法:

listRoots()列出可用的文件系统根
list()  返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
该file对象必须封装了一个目录,而且该目录必须存在,否则方法返回null
listFiles()返回File对象,该目录下的文件和文件名File对象,能够操作对象,所以更加常用
list(FilenameFilter filter);过滤流; FilenameFilter接口,仅有的accept()方法



  1. import java.io.*;  
  2. class  FilesDemo2  
  3. {  
  4.     public static void main(String[] args)   
  5.     {  
  6. //      listRootsDemo();  
  7. //      listDemo_2();  
  8.         listFilesDemo();  
  9.     }  
  10.     public static void listFilesDemo()//  
  11.     {  
  12.         File dir = new File("G:\\");  
  13.         File[] files = dir.listFiles();//由File对象组成的数组  
  14.         for (File f:files )  
  15.         {  
  16.             sop(f.getName()+" : "+f.length());//打印该对象名称及字节数(大小)  
  17.         }  
  18.     }  
  19.     public static void listDemo_2()//过滤流   
  20.     {  
  21.         File dir = new File("f:\\JAVA\\test");  
  22.         String[] arr = dir.list(new FilenameFilter(){//匿名内部类实现FilenameFilter接口  
  23.             public boolean accept(File dir,String name)  
  24.             {  
  25.                 return name.endsWith(".txt");  
  26.             }  
  27.         });  
  28.         sop("len: "+arr.length);  
  29.         for (String name: arr )  
  30.         {  
  31.             sop(name);  
  32.         }  
  33.     }  
  34.     public static void listDemo_1()   
  35.     {  
  36.         File dir = new File("f:\\JAVA\\test");//该对象必须是存在的目录  
  37.         String[] names = dir.list();  
  38.         for (String name :names )//遍历列出该目录下所有文件和目录  
  39.         {  
  40.             sop(name);  
  41.         }  
  42.     }  
  43.     public static void listRootsDemo()//根目录  
  44.     {  
  45.         File[] files = File.listRoots();//列出文件系统根目录(盘符)  
  46.         for (File f : files )//增强for循环,遍历  
  47.         {  
  48.             sop(f);  
  49.         }  
  50.     }  
  51.     public static void sop(Object obj)  
  52.     {  
  53.         System.out.println(obj);    }  
  54. }  


递归


需求:
列出指定目录下文件或文件夹,及其子目录中内容

分析目录中还有目录。只需执行同一个列出目录功能的函数完成即可;在列出过程中判定出现的对象还是目录的话,就再次调用本功能

函数自身调用自身,这种编程形式称为递归

递归示例:


  1. public static int recursion_2(int n){//递归演示2求累加和  
  2.     if(n==1)  
  3.         return 1;  
  4.     else  
  5.         return n+recursion_2(n-1);  
  6. }  
  7. public static void recursion(int num){//递归演示求二进制  
  8.     if (num>0){  
  9.         recursion(num/2);  
  10.         sop(num%2);  
  11.     }  
  12. }  

内存图解:传入一个值6来求其二进制表现


递归注意事项:
1,限定条件
2,要注意控制次数,避免内存溢出

递归获取目录下所有文件


  1. import java.io.*;  
  2. class FileDemo3   
  3. {  
  4.     public static void main(String[] args)   
  5.     {  
  6.         File dir = new File("f:\\java\\test");  
  7.         showDir(dir);  
  8.     }  
  9.     public static void showDir(File dir)  
  10.     {  
  11.         sop(dir);  
  12.         File[] files = dir.listFiles();//返回dir对象下的File对象  
  13.         for(int x=0; x
  14.         {  
  15.             if(files[x].isDirectory())  
  16.                 showDir(files[x]);  //如果是目录,递归  
  17.             else  
  18.                 sop(files[x]);      //如果是文件,打印名称  
  19.         }  
  20.     }  
  21.     public static void sop(Object obj){  
  22.         System.out.println(obj);  
  23.     }  
  24. }  


删除一个带内容的目录

原理:
在windows中删除目录是从里面往外删的,就需要用到递归



  1. import java.io.*;  
  2. class RemoveDir   
  3. {  
  4.     public static void main(String[] args)   
  5.     {  
  6.         File dir = new File("G:\\delete");  
  7.         removeDir(dir);  
  8.     }  
  9.     public static void removeDir(File dir)  
  10.     {  
  11.         File[] files = dir.listFiles(); //获取该目录下所有文件对象  
  12.         for (File f:files )  
  13.         {  
  14.             if (!f.isHidden() && f.isDirectory())//非隐藏并且是目录  
  15.                 removeDir(f);  
  16.             else  
  17.             sop(f.toString()+" file "+f.delete());//删除文件  
  18.         }  
  19.         sop(dir+"  dir  "+dir.delete());    //删除目录  
  20.     }  
  21.     public static void sop(Object obj){  
  22.         System.out.println(obj);  
  23.     }  
  24. }  


需求:文件列表

建立一个java文件列表文件,将制定目录下java文件的绝对路径,存储到一个文本文件中
思路:
1,对指定目录进行递归
2,获取递归中java文件的路径
3,将这些路径存储到集合中
4,将集合中数据写入到列表文件中


操作:


  1. import java.io.*;  
  2. import java.util.*; //集合  
  3. class JavaFileList   
  4. {  
  5.     public static void main(String[] args) throws IOException  
  6.     {  
  7.         File dir = new File("f:\\java\\test");  
  8.         List list = new ArrayList();  
  9.         fileToList(dir,list);  
  10. //      System.out.println(list.size());  
  11.         File file = new File(dir,"javalist.txt");  
  12.         writeToFile(list,file); //写入文本  
  13.   
  14.     }  
  15.     public static void fileToList(File dir,List list)  
  16.     {  
  17.         File[] files = dir.listFiles();//获取File对象数组  
  18.         for (File f : files )  
  19.         {  
  20.             if(f.isDirectory())  
  21.                 fileToList(f,list); //如果是目录,递归  
  22.             else if (f.getName().endsWith(".java"))  
  23.                 list.add(f);        //将满足条件的File对象存入list集合  
  24.         }  
  25.     }  
  26.     public static void writeToFile(List list,File file)  
  27.     {  
  28.         BufferedWriter bufw = null;  
  29.         try{  
  30.                 bufw = new BufferedWriter(new FileWriter(file));//FileWriter可以接收String,也可以接收File  
  31.                 for (File f: list )  
  32.                 {  
  33.                     String path = f.getAbsolutePath();//绝对路径  
  34.                     bufw.write(path);   //写入  
  35.                     bufw.newLine();  
  36.                     bufw.flush();  
  37.                 }  
  38.         }  
  39.         catch (IOException e){  
  40.             throw new RuntimeException("");  
  41.         }  
  42.         finally{  
  43.             try{  
  44.                 if(bufw!=null)  
  45.                     bufw.close();  
  46.             }  
  47.             catch (IOException e){  
  48.                 throw new RuntimeException("");  
  49.             }  
  50.         }  
  51.     }  
  52. }  
阅读(1414) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~