黑马程序员-File类

时间:2014-06-11 09:29:00   收藏:0   阅读:337

File类:

将文件或文件夹封装成对象。

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

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

流不能操作的文件夹,不能操作文件的属性信息,流只能操作数据。      

       字段摘要:static String separator

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

     构造函数:

        File(File parent, String child) :将目录名和文件名分开。可以使文件名变成变量。

              作为变量参数使用。

       例:File f1 = new File("D:","00"+File.separator+"f.txt");           

File方法。

       创建:

       createNewFile(),文件已存在不创建并返回false.

       creatTemFile(String,String):前缀名和后缀名(如.temp)

       creatTemFiel(String,String,StringDir);可以指定路径名,想恶心百度。

       创建目录:

              mkdir();这破名子起的!!

       删除:

              delete:删除文件。

void deleteOnExit():在虚拟机退出的时候,删除。因为有时候出现异常,代码跳转,执行不到删除功能,即使放在finally里也不行(执行中的代码无法删除)。 一般临时文件用

       判断:

              canExcute():是否可执行。()没有createNewFile之前不可以执行

              int compareTo(File pathname) 比较文件名。

              exists:是否存在。

isFile:是否是文件 ,常用,在判断是否是文件或目录时,一定要判断是否存在,要严谨。

              ifDirectory:是否是目录

              isHiddem:是否隐藏。隐藏文件java访问不了。

                    isAbsolute:是否是绝对路径  *

       获取信息: 

              getPath

              getAbsolutePath  返回字符串

              getAbsoluteFile 返回file 

              getName

              length:返回long类型,比读取流的avalible更大。

       特殊:getparent:返回父目录字符串形式  如果没有明确指定上一次父目录,则返回null

                     如果是相相对路径,则返回null,如果相对路径有上一次目录,则不为null

              getParentFile:返回file对象

             long lastModified()  :返回前一次修改的时间。查看是否被别人修改过

              文件覆盖的原理:先判断文件是否存在,再删除。先删后创建。

       特殊:    boolean renameTo(File dest) 传入的参数是file

 

 static File[] listRoots() ;返回的是数组

                     列出可用的文件系统根。即所有的盘符。

               应用:在存储文件时,最好先列出用户的盘符

        注意重要:

        2.0 f1.list():返回String[] ,调用list的对象f1必须封装了一个目录,该目录还必须存在

             列出全部目录和全部文件, 包括隐藏文件

        2.1 list(FilenameFilter filter);文件名过滤

             返回符合过滤器的文件或文件名  String[]

                    accept():boolean accept(File dir, String name) 

应用:列出某个文件下的所有.txt文件。但是只能应用一级目录,列出所有要用到递归。

        例子: 

              String[] names2 = f2.list(new FilenameFilter(){

                     public boolean accept(File f2,String str){//复写方法

System.out.println("str....."+str);//str就是f2中的所有文件,所以可以用str来判断。

                            return str.endsWith(".txt");//只保留.txt文件。

                     }

              });

        3.1 listFiles():返回指定目录下的文件名。

        3.2 listFiles(FilenameFilter filter);

        3.3 listFiles(FileFilter filter);

             --指定文件或文件名,其余全过滤掉。FileFilter接口,一个accept方法。

                    boolean accept(File pathname)  ;注意返回值d

        例子:

               File f3  = new File("d:\\");

               File[] files3 = f3.listFiles(new FilenameFilter(){

                     public boolean accept(File f3,String name){

return name.endsWith(".txt");//只有当返回值问true是才会,路径名才满足过滤器。

                     //返回值为null.

                     //     return false;

                     }

               });

       注:

1.list和listFiles的区别:返回值不一样,返回的file对象还可以在获取或判断等。listFiles方法更好。

2. 过滤可以获取一个目录下的.txt文件.递归也可以.有什么区别?过滤好像只能获取制定的目录而无法继续递归下一级目录. 

递归:     

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

       函数自身调用自身,称为递归。

       递归要注意:

       1.限定条件,不要陷入无限递归。

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

       3.递归中最好不要出现new对象。

       练习1:练习:列出D盘下的所有文件的名称。文件夹中还有文件夹,

               则继续在遍历,如果还是文件夹....,直到是文件

       练习2:不用过滤器能列出指定的文件名吗,如.map3.

       写的正规点。

       思路:1.对指定的目录进行递归。

              2.递归时列出文件的路径

              3.将路径名称存到集合中(缓冲一个,存集合中既可以打印也可以写入文件中)

              4.将集合中的数据写入文件中。由内存到硬盘中)专业:数据的持久化

       练习3;

              删除一个带内容的目录。

              删除原理:在windows中,删除目录从里往外删,java删除不走回收站。

              在删除完文件后,记得将整个文件夹删除.

       练习4:如何将该流中的数据读取到集合中,并进行操作,在存储到文件中。

              思路:

              1.用一个流与info.txt文件关联

              2. load加载进property中。

              3. 使用store或list保存

       练习5:用于记录应用程序运行次数。

                 如果达到使用次数,那么给出注册提示。

              思考:很容易想到计数器,但是程序退出,计数器变

                     在内存中消失了。下一次启动时,又从0开始计数。

                     我们的需求:下次程序启动时会先加载计数器并加1后,在存储。

                     所以建立一个配置文件(以键值对形式存在),用于记录该软件的使用系数。

              键值对数据是map集合。数据是以文件形式存储,使用io技术。

              map + io --> properties

                     建立配置文件

                     操作配置文件

                     保存配置文件

Properties:是Hashtable的子类。是IO与集合的结合容器,里面的键值对都是字符串形式。

         用处:用于键值对形式的配置文件。

         方法:

         getPropertied(key)

         list(PrintStream):属性列表输出到流中  与保存相似

         load(InputStream):从流中读取属性,流可以关联文件

         setPropertity(key,value)

         store(OutputStream,String comments);将属性列表写到OutputStream流中。comments:自定义评论

         Set<String> stringPropertyNames()

         list:输出到流中(相当于配置文件)写入流

         load:配置文件(流)加载进集合(即从配置文件中读取) 读取流

打印流:PrintWrite与PrintStream :可以直接操作输入流和文件

PrintStream 除了输出流的基本功能外,还可以将各种数据类型的数据都原样的打印。1.0

       解释:PrintStream本身是OutputStream的一个子类,不仅具备write等功能,

       还可以直接打印基本数据类型和对象。println(String x)

       造函数可以接受的类型:

       1.file对象。File

       2.字符串路径。String

       3.字节输出流。outputStream(包括System.out)

       的PrintStream(File file) 可以直接操作文件,能操作文件的流都很重要

    创建具有指定文件且不带自动行刷新的新打印流。          

printWriter:具备printStream的功能,并且还增强了。1.1

       Writer的子类。

       造函数可以接受的类型:

       1.file对象。File

       2.字符串路径。String

       3.字节输出流。OutputStream(包括System.out)

       4.字符输出流。Writer

合并流SequenceInputStream:InputStream的子类。

        将其他输入流串联起来,一个流读完,在读下一个.....。

        构造函数:接收类型:文件,字符串路径名,outputStream,Writer

        应用:多个流存到一个目的中,需要多次与目的文件进行关联。麻烦。可以将多个流整合成一个流。

        方法:read,read(byte[] off,len)  *

        构造函数:

        1.SequenceInputStream(Enumeration<?extends InputStream> e);

        2.SequenceInputStream(InputStream s1,InputStream s2);只能传入2个流。 

        接口:Enumertation:枚举,相当于Vector的迭代器。方法:hasMoreElements(),nextElement()  *

        Enumeration<E> elements()   返回此向量的组件的枚举。

        注:enum是抽象类,两者不同

切割文件。一个读取流对应多个输出流。类似分卷压缩。

       原理:指定分切割的大小,用一个数组容器。

黑马程序员-File类,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!