黑马程序员_File和Properties概述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/catch_future/article/details/40260011

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 

File概述

一、File概述

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

创建方法:

1、将已有的和未出现的文件或文件夹封装成对象

File f 1= newFile(“c:\\a\\a.java”);

File f2 = newFile(“c:\\a”);

File f = newFile( “a.java”);

2、也可以目录和文件分开来传入

File f 3= newFile(“c:\\a” , “a.java”);

3、也可以将文件夹分装为File对象传入

File f4 = newFile( f2, “a.java”);

以上对象创建的时候,要注意的是,如果传入文件,只有文件名,那么这个目录就是相对目录,如f。如果有盘符和具体文件夹,那么就是绝对路径,如f1

File中有一个字段,是separator,表示目录分割符,跨平台通用。静态的。

二、File中的常见方法

1、  创建

booleancreatNewFile():创建新文件,会有异常。在指定位置创建文件,创建成功则返回true,如果该文件已经存在,则不创建,返回false

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

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

2、  删除

boolean delete();删除文件或文件夹,删除失败时返回false

void deleteOnExit();在程序退出时删除文件或文件夹

3、  判断

boolean exists()判断文件和目录文件是否存在,这个很总要,很常用。

isDirectory():判断对象是否是目录。

isFile():判断对象是否文件。

使用上述两方法时要注意,在判断对象是否是文件或者目的时,必须要先判断该文件对象封装的内容是否存在,即先判断exists

isAbsolutePath():判断是否是绝对路径

4、  获取信息

String  getName():获取文件或目录名称

String  getPath():获取路径

String  getParent():该方法返回的是绝对路径中的父目录,如果此路径名没有指定父目录,则返回null。如果是相对路径就是null。如果相对路径中有上一层目录,就返回上层目录。

String  getAbsolutePath():获取绝对路径

lastModified():获取最后修改时间

length():获取文件大小

5、  特殊方法boolean renameToFile  dest

举例说明:File f1 = new File(“c:\\d.java”);

                      File f2 = new File(“c:\\ss.java”);

            f2.renameTo(f2);

这里对应的c盘目录中,d.java就变成了ss.java。如果重命名的地址是e盘的话,原来c盘的d.java就不见了,在e盘会出现一个ss.java文件,相当于剪切。

三、File重要方法

File[] listRoots():会返回根目录

String[]  list():会返回指定文件路径下的文件名和文件夹名,包括隐藏的名字的字符串数组。调用list方法的file对象必须封装了一个目录,该目录还必须存在。

String[] list(FilenameFilter filter):这是是传了一个过滤器,可以过滤文件名。而FilenameFilter是一个接口,其中有一个方法accept(File dir, String name)这里就会接收一个文件名,和字符串,返回值类型为boolean。当我们使用这个方法时,list会自动调用这个接口中的accept方法,当返回为true时,就会通过把文件或文件夹名称输入到String数组中,返回为false时就不会。所以我们继承这个几口,复写你方法即可。具体程序为:

       String[] arr = dir.list(new FilenameFilter(){

           //复写accept方法,注意匿名内部类的运用

           publicboolean accept(File dir, String name) {

              //进行我们需要的判断,过滤文件名

              return name.endsWith(".jpg");

           }     

    });

上面这两个方法,返回的仅仅是文件和文件名的字符串

                   File[ ]  listFiles():同上面的方法一致,但是返回的是File实例,可操作的。

                   File[ ]  listFiles(FIlenameFilter filter):加了过滤器的

 

 

          运用上面的方法列出指定目录下问价或者文件夹,包含子目录中的内容,也就是列出指定目录下所有内容。先看程序;

publicclass FileListDemo {

    publicstaticvoid main(String[] args) {

       // TODO自动生成的方法存根

       File f = new File("E:\\Java\\javaTest");

       listDemo(f);

    }

    publicstaticvoid listDemo(File f){

       //list方法列出指定目录下的文件和文件夹

       File[] str  =f.listFiles();

       for (File file : str) {

           //遍历数组进行判断是否为目录

           if(file.isDirectory()){

       //是目录则打印一下这个目录,然后继续调用listDmeo方法

              System.out.println(file.getName().toUpperCase());

              listDemo(file);

              }

           else

       //不是目录则打印到控制台

           System.out.println(file.getPath()+"..."+file.getName());

       }  

    }

}

 

                 从上面程序可看出,我们在方法中有调用了本方法,简单来说就是自己调用自己:看一个简单的程序:

                 void method(){

                            method();

                 }

这就是自己调用了自己,这就叫递归。当然上面这个是死循环。

因为在需求中,目录中还有目录,只要使用同一个列出目录功能的函数完成即可。在列出过程中出现的还是目录的话,还可以再次调用本功能。也就是函数自身调用自身,这中编程方式称为递归。

在使用递归的时候要注意:1、规定限定条件,避免死循环。

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

因为递归是函数不断调用函数自身,所以在栈内存中会不断建立函数,而之前的函数由于后面调用的函数仍在执行,不能释放,所以一旦调用自身次数过大,就会在栈内存中建立非常多的函数,导致内存溢出。

 

 

 

 

总结:

1File对象是操作文件和文件夹的,可以创建文件和文件夹。

2、在之后我们使用文件的时候,一般都要建立成对象,流的构造函数可以接受File对象

3、注意相关的常用方法都是和文件与文件夹有关的。

4、遍历目录的两个方法,一个是list,返回的是文件名组成的String类型的数组。一个是listFiles,返回的是目录下的文件所组成的File类型的数组。

5listlistFiles方法都可以接受一个过滤器FilenameFilter,这是一个接口,其返回的是boolean,当返回为true时,就会载入,否则就会剔除,我们需要复写其中的acceptFile dirString name)。

6、递归方法,就是函数自身调用自身。需要注意:一定要限定条件,避免死循环;递归次数不宜过多,避免内存溢出。

 

 

Properties

一、Porperites概述

Propertieshashtable的子类,也就是说,它具备map集合的特点,而且它里面的键值对都是字符串Properties是集合中和IO技术相结合的集合容器。该对象的特点:可以用于键值对形式的配置文件。

一般软件都会配置信息,而配置信息就在ini文件里,一般只要我们启动软件,相关的配置信息就会加载进来。Properties的特点就在于此,可以操作内存中的键值对,也可以操作硬盘上的键值对即配置信息。

二、常用方法

建立对象 Properties  p = new  Properties();

1void  load(InputStream  in ):从输入流中读取属性列表加载进集合。

         FileInputStream  fis = new FileInputStream(“info.txt);

         p.load(fis);:这步就把info.txt中的属性列表,即键值对,加载进集合中了。

void  load(Reader r  ):从字符流中数据加载进集合

2String  getProperty(String ,key):获取指定键对应的值

String value =p.getProperty(“haihei”);  

3Object  setProperty(Sting key, String value):设置键值对,相当于map集合中的put

         p.setProperty(“key”, “value”);

4Set<String> stringPropertyNames():返回属性列表的键的set集合。

         Set<String>names = p.stringPropertyNames();之后在遍历即可。

5list(PrintStream out):将属性列表输出到指定的输出流

         p.list(System.out);

6、重要一点,Porperties可以操作硬盘数据,这里就用到store方法,把内存中我们操作的properties的数据存入到目标文件中。

         void store(OutputStream  out  , String comments)

         //改变键值对

p.setProperty(“key111” , “value222”);

//建立存储目标

FileOutpurStream  fos = newFileOutputStream(“info.txt”);

//存入目标文件中(就是操作硬盘的数据)

p.store(fos,”information”);

 

三、注意点

         1Properties中都是String类型的

         2、加载数据时,需要有固定格式:键=

         3、配置文件中,在#后面的为注释信息,Properties不会加载

 

 

 

总结来说:

1PropertiesMap类集合。Properties是集合中和IO技术相结合的集合容器。该对象的特点:可以用于键值对形式的配置文件。

2、,它里面的键值对都是字符串。

3Porperties可以直接从流中加载配置文件信息,方法为load,接受一个流对象。加载数据是要有固定格式。

4Porperties可以用store方法把程序中配置好的键值信息传入一个文件汇总,这个方法接收一个输出流。

5、它有自己的设置方法,setPropertykey value)和getPropertykey)。而map集合中的是put

6、注意方法stringPropertyNames,它会将propertie中键信息存储到Set集合中,并将这个集合返回。

7、配置文件中#之后的部分,在Propertie加载时,不会将这部分加载,这部

分是注释信息。

展开阅读全文

没有更多推荐了,返回首页