黑马程序员——40,File类和Properties类

----------- android培训java培训、java学习型技术博客、期待与您交流!------------    

黑马程序员——40,File类和Properties类

一:File类----》
        File类是针对文件和文件夹封装成对象,进行操作的类,放在java.io包中。
        File类的常用字段:public   static   final  String  separator //表示分隔符
File常用构造方法:
1,public  File(File  parent, String  child)  //按照指定文件路径parent和 指定文件名child建立File实例
2,public   File(String  pathname)   //按照指定路径建立File实例
3,public  File(String  parent,  String child)  //按照指定文件路径parent和 指定文件名child建立File实例
      File类常用的方法(soc是打印方法,以下方法很多都会抛出异常,注意在方法上声明):
createNewFile的使用:

                        File  f=new File("f:\\mianbao.txt");
 
                   //以下是在指定路径上创建文件
                    boolean  b  =f.createNewFile();
                    soc(b);
                    /*
                    createNewFile返回的是boolean型,
                    如果在指定路径上创建文件mianbao.txt成功就返回true,否则false
                    注意:如果指定路径下有同名文件就不会创建了返回的也是false
                    还有涉及到IO流的一般都会抛出IO异常,不要忘记这一点。
        如果是这样写的话:
                           File f=new  File("f:\\面包\\mianbao.txt");
                           boolean  b=f.createNewFile();
                    这样是编译显示IO异常,找不到指定路径。
                    (本人电脑f盘此时并没有面包这个文件夹)
                    也就是说路径一定要是真实存在的。
                    */    

 delete和deleteOnExit方法的使用: 
              File f=new File("f:\\mianbao.txt");
                    f.createNewFile();//创建文件
                    boolean b= f.delete();
                    soc(b);
                    /*
                    delete方法删除文件,
                    该方法返回的也是boolean型的, 删除成功则是返回true,否则false
                    File类中还有一个方法deleteOnExit
                    如果用在此例中f.deleteOnExit();表示java程序运行结束前删除文件
                    */
 exists方法的使用:  

              File f=new  File("e:\\JAVAwenjian\\Ioliou17\\Ioliou.17"); 
                    boolean   b=f.exists();//判断文件是否在指定路径存在
                    soc(b);


mkdir建立目录:
              File   f=new  File("shuei\\klkl");
                    boolean b=    f.mkdir();   
                    /*
                    mkdir方法建立一级目录,
                    如果建立指定目录成功返回true否则返回false
                    下面有一种常见情况:
                    一,
                      File  f=new  File("f://单");
                      boolean b=f.mkdir();//返回true
                      也可以指定哪一个盘存放
                    二,
                      File f=new File("shuei//klkl");
                      boolean b=f.mkdir();//返回false
                      只可以指定建立一级目录
                    */


mkdirs建立目录:
                    File f=new  File("菠菜\\好吃的菠菜\\更好吃的菠菜");
                     boolean b=    f.mkdirs();
                     //mkdirs方法可以建立多级目录
                     soc(b);
                     soc("f.exists()="+f.exists());
                     //exists方法也可以用来判断指定路径下是否存在文件夹
 
                     File  f2=new  File("水果.txt");
                     boolean  b2=f2.mkdirs();//这里建立的是名为“水果.txt”的文件夹!
                     soc(b2);
                     //所以mkdir和mkdirs方法都是建立的是文件夹!

isFile和isDirectory判断:
                     File f=new  File("f:\\狂热\\热.txt");      
                       boolean b1=     f.isFile();//判断封装的对象是否是文件
                       boolean b2   =   f.isDirectory();//判断封装的对象是否是文件夹(路径)
                     /*
                     此例的情况是在指定路径下没有名为“热”的txt文件,
                     所以,b1和b2都是false
                     */
                      soc("b1="+b1+"   b2="+b2);


返回路径相关操作:
                     File f=new  File("玄幻1\\玄幻小说.txt"); //
                      boolean  b=f.isAbsolute();
                      /*
                      isAbsolute方法判断是否是绝对路径,
                      就算是文件不存在只要是绝对路径就返回true
                      所谓的绝对路径就是从哪一个盘开始写起的才算是绝对路径
                      */
                      soc("b="+b);                 
                     soc("f.getPath()="+f.getPath());//f.getPath()=玄幻1\玄幻小说.txt
                     soc("f.getParent()="+f.getParent());//f.getParent()=玄幻1
                     // getParent方法返回的是绝对路径的父目录否则返回null
 
                      soc("f.getAbsolute()="+f.getAbsolutePath());
                      //打印的是f.getAbsolute()=E:\JAVAwenjian\玄幻1\玄幻小说.txt
                      //getAbsolutePath方法返回的是绝对路径
                     soc("f.getName()="+f.getName());//f.getName()=玄幻小说.txt

lastModified方法

                   File  f=new File("e:\\JAVAwenjian\\Ioliou17.java");
                   long l=   f.lastModified();
                   //lastModified方法返回的是文件最后一次被修改的时间
                   soc("f.lastModified()="+f.lastModified());      

renameTo方法
                     File f=new  File("f:\\无标题23copy.png"); 
                     File f2=new  File("d:\\无标题23copy.png");
                     f.renameTo(f2);
                     //效果是:f盘中的无标题23copy.png被剪切到d盘上
 
                     File f3=new File("f:\\yuyuyu.java"); 
                     File f4=new File("d:\\shue.java");
                     f3.renameTo(f4);
                    //效果是:f盘中的yuyuyu.java剪切到d盘上并更名为shue.java

list方法把指定目录下的文件或者文件夹装进数组里面:
                  File  f=new  File("f:\\yuyuyu.txt");
                   String[]   s= f.list();
                   /*
                   list方法返回的是指定路径下(不能是指定文件)所有的文件名和文件夹名,
                   如果指定的不是路径而是文件,那么会运行空指针异常
                   */

获取根目录:
              File[] f=File.listRoots(); //罗列硬盘的根目录
                    for(File f2:f)
                    {
                          soc(f2);  
                    }
                    /*
                    打印的是:
以下是listRootsDemo-------
C:\
D:\
E:\
F:\
G:\
                    */

listFiles方法把指定目录下的文件或者文件夹装进数组里面:
                    File  f=new  File("f:\\");
                    File[]  fs=     f.listFiles();//罗列出某个路径下所有文件或者目录
                    for(File  zz:  fs)
                    {
                       soc(zz.getName()+"---"+zz.length());
                       //如果是文件夹的话,打印出来的长度显示为0的
                    }


用FilenameFileter过滤指定目录下的文件或者文件夹:
 //只是打印出f盘中的所有的.txt文件
                   File  f=new File("f:\\");
                   String[]  s   =f.list( new    FilenameFilter(){
                      public   boolean  accept(File  dir,String name)
                      {
                            return   name.endsWith(".txt");
                      }
                   });
/*
File对象的功能:
文件列表
如果只需要罗列出某个指定路径下的某种类型的文件名,
就要用到FilenameFilter,其作用相当于过滤器,
里面有一个方法boolean  accept(File dir,String  name),覆盖该方法就可以了。
*/
     

 public  static   void  soc(Object  obj)//打印方法
         {
              System.out.println(obj);       
         }


/*
File类的应用:
      罗列出指定路径下所有文件。
      这个就需要用到递归了,使用递归的时候要注意限制条件以及递归次数。

其步骤是:

1,先指定好要遍历的路径

2,把指定路径中所有文件或者文件夹放在数组中

3,对数组进行遍历

4,在遍历过程中打印文件名,如果遇到文件夹就用递归遍历其中的文件,重复以上操作直到完结
*/

Import   java.io.*;
class   Ioliou20
{
         public  static   void  main(String[] args)
         {
                   File   f=new   File("f:\\技术博客的图片\\");//先指定好要遍历的路径
                  method(f)   ;   
 
         }
         public  static   void  method(File   f)
         {
                   soc("这是---"+f);
                   File[]   fs=f.listFiles();//罗列出指定路径中的所有文件或者目录
                   for(int  x=0;x<fs.length;x++  )//进行遍历
                   {
                           
                            if(fs[x].isDirectory())
                            method(fs[x]);
                            /*
                            因为目录中还有目录,
                            所以可以自身调用自身函数,这种编程手法称为递归
                            */
                            else
                        soc(fs[x]); //打印的是绝对路径          
                   }                    
         }
         public  static   void  soc(Object  obj)//打印方法
         {
             System.out.println(obj);
         }
}
删除带内容的目录

其步骤是:

1,先指定好要遍历的路径

2,把指定路径中所有文件或者文件夹放在数组中

3,对数组进行遍历

4,在遍历过程中delete删除文件,如果遇到文件夹就用递归遍历其中的文件,重复以上操作

5,最后把指定路径也用delete删除掉

import   java.io.*;
class     Ioliou21
{
         publicstatic void main(String[] args)
         {
                   File    f=new  File("f:\\今天练习\\");//先指定要删除的目录
                   method(f);
                   File[]    fs=   f.listFiles(); //罗列指定路径中的文件或者目录
                   for(int  x=0;x<fs.length;x++)//遍历
                   {
                        if(fs[x].isDirectory())  //如果是文件夹就递归再次遍历删除里面的文件  
                             {
                                      method(fs[x]);
                                     //soc(fs[x]+"--文件夹--"+fs[x].delete());
                                      
                             }
                             else
                                      soc(fs[x]+"---"+fs[x].delete());//如果是文件的话直接删除
                             
                   }
                   if(f.isDirectory())//这里加上这个判断把外层的文件夹删掉
                            soc(f+"--文件夹--"+f.delete());
                  
 
         }
         public  static  void   soc(Object  obj)//打印方法
         {
             System.out.println(obj);             
         }
}


建立java文件列表,这个需要配合IO流读取写入

步骤是:

1,指定源目录

2,建立存放文件的列表可以使ArrayList

3,遍历源目录,添加文件名,如果有文件夹再递归获取里面的文件名

4,把容器中的文件名写入指定存放的文件中 

Import   java.io.*;
import   java.util.*;
class  Ioliou22
{
         public  static   void  main(String[] args)throws  IOException
         {
                   File  f=new  File("f:\\java文件练习");//指定源目录
                  List<String>  li=new  ArrayList<String>();//建立存放文件的列表
                   File   f2=new  File("f:\\2015.8.10.txt");//指定存放文件名的文件
                   method(f, li) ;//遍历源目录,添加文件名,如果有文件夹再递归获取里面的文件名
                   method2(li,f2);  //把容器中的文件名写入指定存放的文件中      
         }
         public  static  void  method(File  f,List<String>  li  )
         {
                    File[] fs     =f.listFiles();//罗列指定路径下的文件或者文件夹
                    for(int x=0;x<fs.length;x++)
                    {
                          if(fs[x].isDirectory())//如果是文件夹递归再获取里面的文件
                                        method(fs[x],li);
                               else
                                       if(fs[x].getName().endsWith(".java"))//判断是否是后缀名为.java文件
                      li.add(fs[x].getAbsolutePath());  //添加的是绝对路径                   
                    }
                            
         }
         public  static  void  method2(List<String>  li,File   f)throws  IOException
         {
          //FileWriter   fw=new   FileWriter(f.getAbsolutePath());
                FileWriter   fw=new  FileWriter(f);
                      //FileWriter构造函数也可以接受File类对象
                      BufferedWriter   bfw=new  BufferedWriter(fw);
                      for(String  s:li)//逐个遍历写入
                      {
                           bfw.write(s);    
                                     bfw.newLine();
                                     bfw.flush();
                      }
                      bfw.close();//关闭资源
                     
         }
         public  static   void  soc(Object  obj)//打印方法
         {
              System.out.println(obj);              
         }
}

二:Perproties类----》
        Properties类的介绍:Properties集合是Hashtable集合的子类,同时具备Map集合特点,里面存放的都是字符串,没有泛型。
        Properties集合对象特点:可以用于键值对形式的配置文件,从文件中把数据加载到容器里面的时候需要固定格式:键=值
        Properties类是集成了Map和IO流的技术。Map加IO技术就是Properties,主要用于配置文件,配置文件可以实现应用程序数据的共享。其中setProperty方法可以把键值对放进容器中,getProperty方法可以获取键所对应的值,stringPropertyNames方法把所有键放在Set集合中。由于Properties具有Map集合的特点,所以,某对键值对重复了,那么新来的重复元素会覆盖前一个。

小练习:往f:\\8.10号练习.txt中添加新键值对
f:\\8.10号练习.txt的内容:
bvuivb=8
heauobgvjeb=02   qcdtycwqd=45
buiverhbgvi=09
oirjgbitr=20
hbn=00
iohoii=74
oirjgbitr=55

其步骤是:

1,定义Properties容器

2,定义与源文件关联的读取流

3,用load方法加载读取流所关联的源文件中的数据

4,用setProperty添加新的键值对

5,定义写入流与目的地关联

6,用store方法把Properties容器中的元素替换写入流所关联的文件数据

7,可以用Properties类的list方法把Properties容器中的内容打印到控制台

(注意打印出来的顺序,Properties是Hashtable的子类,内部默认按照哈希值表排序的,所以打印出来的顺序与输入顺序可能不一样)
8,关闭资源

import     java.io.*;
import     java.util.*;
class    Ioliou23
{
         public     static     void  main(String[] args)throws  IOException
         { 
    
                      Properties     pro=new   Properties();//定义Properties容器
                      FileInputStream      fis=new    FileInputStream("f:\\8.10号练习.txt");//定义与源文件关联的读取流
                      pro.load(fis);//直接加载文件数据(键值对)到容器中
                      pro.setProperty("kkkkkk","kk");//又添加元素到容器中
                      FileOutputStream   fos=new FileOutputStream("f:\\8.10号练习.txt");//定义写入流与目的地关联
                      pro.store(fos,"jk");//把pro容器里面的键值对保存到流关联的文件中相当于替换,其中jk仅仅为注释
         
                      pro.list(System.out);
                      /*
                      这句话把容器pro的内容打印出来,打印的格式:
          -- listing properties --
          bvuivb=8
          oirjgbitr=55
          kkkkkk=kk
          heauobgvjeb=02   qcdtycwqd=45
          buiverhbgvi=09
          hbn=00
          iohoii=74
 
          */
 
          fis.close();//关闭资源
                      fos.close();
                     
         }
         public   static void  soc(Object  obj)
         {
             System.out.println(obj);        
         }
}

Properties的练习:(配置文件的建立和使用)
记录程序运行次数,次数已到就给出注册提示。
 
1,建立读取流与配置文件关联

2,建立Properties容器

3,load把读取流关联的配置文件的数据加载进来

4,getPropertiy获取键cishu所对应的值

        返回值为null就用setProperty添加键值对cishu=1

         否则,cishu所对应值加1再用setProperty添加该键值对覆盖掉原本的键值对(这一步很重要)

5,定义写入流与目的地配置文件关联

6,用store方法把容器中的键值对替换写入流所关联的目的地配置文件中

7,关闭资源

import    java.io.*;
import    java.util.*;
class    Ioliou24
{
         public     static    void   main(String[] args) throws IOException
         {
                   //File   f=new File("f:\\jilu.properties");//一般写后缀名.properties配置文件
                   File   f=new  File("f:\\jilu.ini");
                   if(!f.exists())
                            f.createNewFile();
 
                   FileReader    fis=new   FileReader(f);
                   //建立读取流对象,这里可以用字符流读取流又可以用字节流读取流
                   Properties   pro=new Properties();//建立Properties对象
                   pro.load(fis);//加载文件数据到容器中
                   String   s= pro.getProperty("cishu");//获取值
                   int  i=0;
                   if(s==null)
                   {
              pro.setProperty("cishu","1");       
                             
                  }
                   else
                   {
                       i= Integer.parseInt(s);//把字符串转变成数字
                            i++;
                            if(i>=6)
                                {
                                    soc("次数超过了");      
                                }
                       pro.setProperty("cishu",i+"");
                   }
        
                   FileWriter   fos=new     FileWriter(f);
                   //建立写入流对象,这里可以用字符流写入流又可以用字节流写入流
                    pro.store(fos,"haha");//把数据保存在文件中
                    fis.close();//关闭资源
                    fos.close();
 
         }
         public  static void  soc(Object  obj)
         {
             System.out.println(obj) ;       
         }
}



----------- android培训java培训、java学习型技术博客、期待与您交流!------------    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值