第十二章 java流与文件操作 第四讲

来源:互联网 发布:java中正则表达式语法 编辑:程序博客网 时间:2024/04/30 10:01
 

第十二章  java流与文件操作  第四讲

四、文件操作-----File类

(1)File类可以用一些方法来操作文件和获取文件的信息包括:更改文件名、删除文件、列出目录下的文件以及文件对象属性的描述信息等。

File的构造方法

 public   File(String  pathname); 

    File f1 = new File(“data.txt”);

 public   File(String path,String name);

    File f2 = new File(“c:\\aa”,”data.txt”);

 public   File(File  parent,String chile);

File file4=new File(“c:/example”,”demo.txt”);

    注:pathname指路径名字符串,path指父类路径名,String 是文件名

 

(2) 静态常量

由于不同操作系统的文件分隔符以及路径分隔符不同,因此,如果要获取当前系统的文件和路径的分隔符,可使用以下两个静态常量。

public static final char separatorChar;

public static final  String separator;

实例:File file = new File("c:"+File.separator+"abc"+File.separator+"a.txt");

注:这两个常量可以在两种操作系统下进行,如实例所写的一样,为:c:\\abc\\a

 

(3) 访问文件常用的方法

    (1)访问文件对象

     File f = new File(“res\aa.txt”);

public String getName()    ------结果为: aa.txt

 //返回文件对象名,不包含路径名

public String getPath()  -------- res\aa.txt

             //File对象中封装的路径是什么,获取的就是什么

public String getAbsolutePath()

 //返回绝对路径名,包含文件名---------- D:\java\java\res\aa.txt

public String getParent()  

            //返回父文件对象的路径名,如果封装的是相对路径,返回null  -------res

public File  getParentFile()

        //返回父文件对象   ------------- D:\java\java\res

(2)获得文件属性

  public long length()     //返回文件的字节长度

  public boolean exists()    //测试指定的文件是否存在

  public long lastModified()   //返回文件最后被修改的时间

(3)文件操作

  public boolean renameTo(Filedest)  //文件重命名

  public boolean  delete()   //删除空目录或文件

(4)目录操作

  public boolean mkdir () //创建目录,正常建立时返回true

        补充:在创建目录时,可以加上if语句来判断是否存在,如果不存在在创建

            (1)单级目录的创建

                File f3 = new File("c:\\aa");

                  if(!f3.exists()){

                  f3.mkdir();

              }

           (2)多级目录的创建

              File f4 = new File("c:\\bb\\cc\\dd");

                  if(!f4.exists()){

                  f4.mkdirs();

              }

  public String[] list()    //返回目录中的所有文件名字符串

        补充:

          (1)显示当前文件夹里的所有东西------list() 只能显示文件名

           String[] arr = f3.list();

           for(String name:arr){

               System.out.println(name);

           }

        (2)显示当前文件夹下的文件名和子文件夹-----listFiles()

              File[] files = f3.listFiles();

              for(int i=0;i<files.length;i++){                                       System.out.println(files[i].getName()+”/t”+files[i].lastModified()+”/t”+files[i].isFile()?”文件”:”目录”);}

 

(5) 利用子文件递归方法调用文件的子文件----使用递归时,一定要有递归的终止条件,并且调用次数也不要过多,否则会出现内存溢出.

第一种:

public void listDir(File dir){

       //方法listDir()里的参数是File类的对象

       System.out.println(dir.getName()+"以下是文件下的子文件:");

       File[] files1 = dir.listFiles();

       for(int i=0;i<files1.length;i++){

           if(files1[i].isFile()){

              System.out.println(files1[i].getName());

           }else{

              listDir(files1[i]);//递归的使用

           }

       }

第二种:

    public void listDir1(File dir,int level){

       System.out.println(getLevel(level)+dir.getName());

       level++;

       File[] files = dir.listFiles();

       for(int x =0; x<files.length; x++){

           if(files[x].isDirectory())//如果遍历到的是目录。

              listDir1(files[x],level);//递归。

           else

              System.out.println(getLevel(level)+files[x].getName());

       }

    }

    //增加目录层次

    public String getLevel(int level){

       StringBuilder sb = new StringBuilder(); 

           注:是缓冲的字符串,和StringBuffered 一样

       sb.append("|--");

       for(int x=0; x<level; x++){

           sb.insert(0,"|  ");  //插入---从第0个开始,

       }

       return sb.toString();

    }

}

    输出的结果大概为:

  |--aa

|  |--rr

 

(6) 过滤器的应用------FileFilter---是接口,所有要想实现必须实例化类,根据继承

    public class MyFileFilter implements FileFilter{

        String externName;//设置过滤条件----即是过滤那个文件结尾的文件

        public MyFileFilter(String externName){

           this.externName=externName;

        }

    //以上构造函数时为了让用户自己输入过滤条件,并调用

    //显示验证的文件是否符合过滤条件

    public boolean accept(File pathname){

        if(pathname.isDirectory()){

           return false;

       }

       //查找  .  并用条件判断

       String filename = pathname.getName();

       int n = filename.indexOf(".");

       if(n==-1 || n==filename.length()-1){

           return false;

       }

       //文件截取从.之后

       if(filename.substring(n+1).equals(externName)){

           return true;

       }

       return false;

    }

(7)随机文件操作--------- RandomAccessFile

       RandomAccessFile raf = new RandomAccessFile(“dome.txt”,”rw”);

 

        raf.writeInt(1234);  向文件中写入

 

       raf.seek(0); //定位到最开头

       int n = raf.readInt();  读取文件