Java基础--IO流之File类

凌风博客原创作品。转载请注明出处:http://blog.csdn.net/q549130180/article/details/45333425


File类常见方法

1.创建
boolean createNewFile();  在指定位置创建文件,如果该文件已经存在,则不创建,返回false
和输出流不一样,输出流对象一建立就会创建文件,而且文件已经存在,会覆盖


boolean mkdir();  创建文件夹,只能创建一级文件夹
boolean nkdirs();  创建多级文件夹


2.删除
boolean delete();    删除失败返回false
void deleteOnExit();   在程序退出时删除指定文件。


3.判断
boolean exists();  文件是否存在
isFile(); 判断此路径下是否是一个文件
isDirEctory();  判断此路径下是否是一个文件夹
isHidden();   判断此路径下是否是一个隐藏文件
isAbsolute();  判断此抽象路径名是否为绝对路径名




4.获取信息
getName();
getPath();
getParent();  获取父目录


getAbsolutePath()   获取绝对路径
long lastModified();  返回此抽象路径名表示的文件最后一次被修改的时间。

long length();

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. class FileDemo19  
  2. {  
  3.     public static void main(String[] args) throws IOException  
  4.     {  
  5.         method_2();  
  6.     }  
  7.   
  8.     public static void method_5()  
  9.     {  
  10.         File f1 = new File("c:\\Test.java");  
  11.         File f1 = new File("d:\\haha.java");  
  12.   
  13.         sop("rename"+f1.renameTo(f2));  //相当于剪切,并重命名  
  14.     }  
  15.   
  16.     //获取信息  
  17.     public static void method_4()  
  18.     {  
  19.         File f = new File("file.txt");  
  20.   
  21.         sop("path:"+f.getPath());  
  22.         sop("Abspath:"+f.getAbsolutePath()); //即使文件不存在,也可以获取其路径  
  23.         sop("parent:"+f.getParent());  //该方法返回的是绝对路径中的父目录,如果获取的是相对路径,则返回null  
  24.                                         //如果相对路径中有上一层目录那么该目录就是返回结果。  
  25.   
  26.     }  
  27.   
  28.     //判断  
  29.     public static void method_3() throws IOException  
  30.     {  
  31.         File f = new File("file.txt");  
  32.   
  33.         //f.createNewFile();  
  34.   
  35.         f.mkdir();  
  36.   
  37.         //记住在判断文件对象是否是文件或者目的时,必须要先判断该文件对象封装的内容是否存在。  
  38.         //通过exists判断  
  39.         sop("dir:"+f.isDirectory());  
  40.         sop("file:"+f.isFile());  
  41.   
  42.         sop(f.isAbsolute());//判断此抽象路径名是否为绝对路径名  
  43.     }  
  44.   
  45.   
  46.     //判断  
  47.     public static void method_2()  
  48.     {  
  49.         File f = new File("file.txt");  
  50.   
  51.         //sop("exists:"+f.exists());//判断文件是否存在  
  52.         //sop("execute:"+f.canExecute()); //判断是否为可运行文件  
  53.   
  54.   
  55.         //创建文件夹  
  56.         File dir = new File("abc\\ddd\\ccfg\\ew\\aws\\sdf");  
  57.   
  58.         sop("mkdir:"+dir.mkdirs());  
  59.   
  60.   
  61.     }  
  62.       
  63.   
  64.   
  65.   
  66.     //创建和删除的演示  
  67.     public static void method_1()  
  68.     {  
  69.         File f =new File("file.txt");  
  70.   
  71.         f.deleteOnExit();//在虚拟机退出时,将文件删除  
  72.           
  73.         //System.out.println("create:"+f.createNewFile());  //创建文件  
  74.         System.out.println("delete"+f.delete());  
  75.   
  76.     }  
  77.   
  78.   
  79.       
  80.     //创建File对象  
  81.     public static void consMethod() throws IOException  
  82.     {  
  83.         //将a.txt封装成file对象,可以将已有的和未出现的文件或者文件夹封装成对象  
  84.         File f1 = new File("a.txt");  
  85.   
  86.         //"c:\\abc" 代表文件夹父目录,b.txt代表文件  
  87.         File f2 = new File("c:\\abc","b.txt");  
  88.   
  89.         File d = new File("c:\\abc");  
  90.         File f3 = new File(d,"c.txt");  
  91.   
  92.         System.out.println("f1"+f1);  
  93.         System.out.println("f2"+f2);  
  94.         System.out.println("f3"+f3);  
  95.           
  96.         //File.separator实现跨平台的分隔符  
  97.         File f4 = new File("c:"+File.separator+"abc"+File.separator+"zzz"+File.separator+"a.txt");  
  98.     }  
  99.     public static void sop(Object obj)  
  100.     {  
  101.         System.out.println(obj);  
  102.     }  
  103. }  

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. import java.io.*;  
  2. class FileDemo19_2   
  3. {  
  4.     public static void main(String[] args)   
  5.     {  
  6.         listDemo2();  
  7.     }  
  8.   
  9.   
  10.     //listFiles获取的是文件对象  
  11.     public static void listFilesDemo()  
  12.     {  
  13.         File dir new File("c:\\");  
  14.   
  15.         File[] files = dir.listFiles();  
  16.   
  17.         for(File f : files)  
  18.         {  
  19.             System.out.println(f.getName()+":::"+f.length());  
  20.         }  
  21.     }  
  22.       
  23.     //带参数的list  
  24.     public static void listDemo2()  
  25.     {  
  26.         File dir = new File("G:\\Java Test\\IO流");  
  27.         String[] arr = dir.list(new FilenameFilter()  
  28.         {  
  29.             public boolean accept(File dir,String name)  
  30.             {  
  31.                 //System.out.println("dir:"+dir+"....name:"+name);  
  32.                 /* 
  33.                 if(name.endsWith(".bmp") 
  34.                     return true; 
  35.                 else 
  36.                     return false; 
  37.                 */  
  38.   
  39.                 return name.endsWith(".java");  
  40.   
  41.             }  
  42.         });  
  43.   
  44.         System.out.println("len:"+arr.length);  
  45.         for(String name : arr)  
  46.         {  
  47.             System.out.println(name);  
  48.         }  
  49.     }  
  50.       
  51.     //返回某一目录下的所有文件和文件夹信息  
  52.     public static void listDemo()  
  53.     {  
  54.         File f = new File("d:\\");  
  55.   
  56.         String[] names = f.list();   //调用list方法的file对象必须是封装了一个目录,该目录还必须存在  
  57.         for(String name : names)  
  58.         {  
  59.             System.out.println(name);  
  60.         }  
  61.     }  
  62.   
  63.     //返回系统下所有的盘符信息  
  64.     public static void listRootsDemo()  
  65.     {  
  66.         File[] files = File.listRoots();  
  67.   
  68.         for(File f : files)  
  69.         {  
  70.             System.out.println(f);  
  71.         }  
  72.     }  
  73. }  

列出指定目录下文件或者文件夹,包含子目录中的内容
也就是列出指定目录下所有内容


因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可
在列出工程中出现的还是目录的话,还可以再次调用本功能
也就是函数自身调用自身
这种表现形式,或者编程手法,称为递归




递归要注意:
1.限定条件
2.要注意递归的次数,尽量避免内存溢出

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. import java.io.*;  
  2. class FileDemo19_3   
  3. {  
  4.     public static void main(String[] args)   
  5.     {  
  6.         File dir = new File("G:\\Java Test");  
  7.         showDir(dir,0);  
  8.     }  
  9.   
  10.     //实现带层级的目录  
  11.     public static String getLevel(int level)  
  12.     {  
  13.         StringBuilder sb = new StringBuilder();  
  14.   
  15.         sb.append("|--");  
  16.         for (int x = 0;x<level ;x++ )  
  17.         {  
  18.             //sb.append("|--");  
  19.             sb.insert(0,"   ");  
  20.         }  
  21.         return sb.toString();  
  22.     }  
  23.       
  24.     //列出指定目录下文件或者文件夹,包含子目录中的内容  
  25.     public static void showDir(File dir,int level)  
  26.     {  
  27.         System.out.println(getLevel(level)+dir.getName());  
  28.   
  29.         level++;  
  30.         File[] files = dir.listFiles();  
  31.         for (int x = 0;x<files.length ;x++ )  
  32.         {  
  33.             if(files[x].isDirectory())  
  34.                 showDir(files[x],level);  
  35.             else  
  36.                 System.out.println(getLevel(level)+files[x]);  
  37.         }  
  38.     }  
  39. }  

删除原理:
在windows中,删除目录从里面往外删除的


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

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. import java.io.*;  
  2. class RemoveDir20  
  3. {  
  4.     public static void main(String[] args)   
  5.     {  
  6.         File dir = new File("d:\\test");  
  7.         removeDir(dir);  
  8.     }  
  9.     public static void removeDir(File dir)  
  10.     {  
  11.         File[] files = dir.listFiles();  
  12.   
  13.         for (int x = 0;x<files.length ;x++ )  
  14.         {  
  15.             if(files[x].isDirectory())  
  16.                 removeDir(files[x]);  
  17.             else  
  18.                 System.out.println(files[x].toString()+":-file-:"+files[x].delete());  
  19.         }  
  20.         System.out.println(dir+"::dir::"+dir.delete());  
  21.     }  
  22. }  

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


思路:
1.对指定的目录进行递归
2.获取递归过程所有的java文件的路径
3.将这些路径存储到集合中
4.将集合中的数据写入到一个文件中

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. import java.io.*;  
  2. import java.util.*;  
  3. class JavaFileList21   
  4. {  
  5.     public static void main(String[] args) throws IOException  
  6.     {  
  7.         File dir = new File("G:\\Java Test");  
  8.   
  9.         List<File> list = new ArrayList<File>();  
  10.   
  11.         fileToList(dir,list);  
  12.   
  13.         File file = new File(dir,"javalist.txt");  
  14.   
  15.         writerToFile(list,file.toString());  
  16.     }  
  17.     //递归取出所有对象,存入到List中  
  18.     public static void fileToList(File dir,List<File> list)  
  19.     {  
  20.         File[] files = dir.listFiles();  
  21.   
  22.         for (File file : files )  
  23.         {  
  24.             if(file.isDirectory())  
  25.                 fileToList(file,list);  
  26.             else  
  27.             {  
  28.                 if(file.getName().endsWith(".java"))//过滤.java文件  
  29.                     list.add(file);  
  30.             }  
  31.         }  
  32.     }  
  33.       
  34.     //将List集合中的对象信息取出,写入到文件中  
  35.     public static void writerToFile(List<File> list,String javaListFile) throws IOException  
  36.     {  
  37.         BufferedWriter bufw = null;  
  38.         try  
  39.         {  
  40.             bufw = new BufferedWriter(new FileWriter(javaListFile));  
  41.             for(File f : list)  
  42.             {  
  43.                 String path = f.getAbsolutePath();  
  44.                 bufw.write(path);  
  45.                 bufw.newLine();  
  46.                 bufw.flush();  
  47.   
  48.             }  
  49.         }  
  50.         catch (Exception e)  
  51.         {  
  52.             throw e;  
  53.         }  
  54.         finally  
  55.         {  
  56.             try  
  57.             {  
  58.                 if(bufw!=null)  
  59.                     bufw.close();  
  60.             }  
  61.             catch (Exception e)  
  62.             {  
  63.                 throw e;  
  64.             }  
  65.         }  
  66.     }  
  67. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值