2016-11-07 文件操作类

      前言:对于Java中的IO学习来讲比较复杂,关键的问题是涉及到父类,子类太多了。但是对于初学者来讲记住这样的一个学习原则:抽象类中的方法会根据实例化其子类的不同,也会完成不同的功能需求。

一、基本操作

      在java.io包中一共有这样的五个类,一个接口较为重要:

      |-五个类:File,InputStream、OutputStream、Reader、Writer;

      |-接口:Serializable接口;

      特别需要注意:File类是唯一一个与文件操作的本身相关的,不涉及到文件中的内容操作。怎么去理解文件的本身操作呢?实际通俗的讲:文件的创建、删除等操作;

      使用File类的具体操作方法:首先操作File类需要利用其构造方法设置要操作文件的路径;

      |-构造方法:public File(String pathname)设置完整的路径;

                      public File(String parent,String child)设置父路径与子文件路径;(Android使用的会比较多);

      |-创建文件:public boolean createNewFile()throws IOException;(这里会抛出一个异常:1.目录不能访问;2.文件重名,或者文件名称有误等情况);

      |-删除文件:public boolean delete();

      |-判断文件是否存在:public boolean exists();

      上面的几个方法都是比较常见的File类下的操作方法;

范例代码:

package cn.mldn.demo16;
import java.io.File;
public class TestDemo {
    public static void main(String[] args) throws Exception{
        //设置一个文件路径
          File file = new File("H:\\test.txt");
        if(file.exists()){
            //判断文件是否存在返回是boolean
            //如果文件存在则做删除处理
            file.delete();
        }else{
            //如果文件不存在则创建文件
            //由于做的是演示代码因此异常统一使用Exception抛出
            System.out.println(file.createNewFile());
        }
    }
}

     此时会在H盘的根目录下创建一个名为test.txt的文本文档。

     在File类中定义了一个常量:public static final String separator;由类名.separator直接调用,其意义代表的是文件路径的分隔符号,为了不同系统下使用分隔符造成混乱的困扰;

范例代码:

package cn.mldn.demo16;
import java.io.File;
public class TestDemo {
    public static void main(String[] args) throws Exception{
        //设置一个文件路径
         File file = new File("H:"+File.separator+"test.txt");
        if(file.exists()){
            //判断文件是否存在返回是boolean
            //如果文件存在则做删除处理
            file.delete();
        }else{
            //如果文件不存在则创建文件
            //由于做的是演示代码因此异常统一使用Exception抛出
            System.out.println(file.createNewFile());
        }
    }
}

二、File类的操作方法

       以上在操作的时候,文件的创建是直接在根目录下,但是在实际的工作中,时常是需要将文件保存在含有子目录的路径下;

       对于子目录的使用的过程中要依靠下面的两个方法:

       |-找到父路径:public File getParentFile();注意其返回的是一个File类对象;

       |-创建目录:public boolean mkdir()

范例代码:

package cn.mldn.demo16;
import java.io.File;
public class TestDemo {
    public static void main(String[] args) throws Exception{
          //1.设置一个文件路径
        File file = new File("H:"+File.separator+"demo"+File.separator+"Hello"+File.separator+"test.txt");
          //2.判断父路径是否存在
        if(!file.getParentFile().exists()){//父路径不存在
            //3.创建父路径
            file.getParentFile().mkdirs();
        }
       //4.判断文件是否存在
        if(file.exists()){//文件存在
            file.delete();//执行文件删除
        }else{
          //创建文件并且通过返回boolean值进行判断
            System.out.println(file.createNewFile());
        }
    }
}

    除了上面提到这些操作,在File类中还存在一些功能方法:

    |-取得文件大小:public long length();注意字节有为单位返回

    |-判断是否是文件:public boolean isFile();

    |-判断是否是目录:public boolean isDirectory();

    |-最近一次的修改时间:public long lastModified();返回的是long类型;

范例代码:

package cn.mldn.demo16;
import java.io.File;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDemo {
    public static void main(String[] args) throws Exception{
        //设置文件路径
         File file = new File("H:"+File.separator+"my.jpg");
        if(file.exists()){
            System.out.println("是否是文件:"+(file.isFile()));
            System.out.println("是否是目录:"+(file.isDirectory()));
            //涉及的内容:
              //1.利用大浮点数求四舍五入,由于file.length()方法返回值为字节进行强制转化成double类型
              //2.保留两为小数,采用进位方式为:ROUND_HALF_UP
            System.out.println("文件大小:"+(new BigDecimal((double)file.length()/1024/1024)
                              .divide(new BigDecimal(1),2,BigDecimal.ROUND_HALF_UP))+"M");
            //涉及的内容:
              //1.利用Date类的构造方法将file.lastModified()返回的long型转化成data
            //2.利用SimpleDateFormat类下的方法format()实现Data到String转换
              System.out.println("最后一次修改时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
                               .format(new Date(file.lastModified())));
        }
    }
}

      测试结果:

QQ截图20161107200510

      以上代码的目的:1.实现File类的一些其他的常规方法的使用;

                           2.覆写一下BigDecimal类,Date类还有SimpleDateFormat类的重要转换。

三、操作目录

       以上都是对于文件的操作,对于目录的操作,主要包含下面两个方法:

       |-列出目录下的信息:public String[] list();注意此时放回的是一个字符串数组;

       |-列出所有的信息以File类对象包装:public File[] listFiles();

范例代码:

package cn.mldn.demo16;
import java.io.File;
public class TestDemo01 {
    public static void main(String[] args) {
        File file = new File("H:"+File.separator);
        //1.判断是否是文件路径
         if(file.isDirectory()){
          //2.调用file.list()方法
            String result[] = file.list();
          //3.输出文件目录内容
            for(int i=0;i<result.length;i++){
                System.out.println(result[i]);
            }
        }
    }
}

      运行结果:

QQ截图20161107202059

      此时运行已经能够列出目录下的内容,但是这里列出的目录下的子目录或者是文件的名字。

      列出File类下的全部对象:

范例代码:

package cn.mldn.demo16;
import java.io.File;
public class TestDemo01 {
    public static void main(String[] args) {
        File file = new File("I:"+File.separator);
        //1.判断是否是文件路径
        if(file.isDirectory()){
            //2.调用file.listFiles()方法
            File result[] = file.listFiles();
            //3.输出文件目录内容
            for(int i=0;i<result.length;i++){
                System.out.println(result[i]);
            }
        }
    }
}

        运行结果:

image

       总结:

       1.File类本身只是操作文件,不涉及到内容;

      2.File类中常用的重要方法:

           |-设置文件完整路径:public File(String pathname);

           |-删除文件:public boolean delete();

           |-判断文件是否存在:public boolean exists();

           |-找到父类路径:public File getParentFile();

           |-创建目录:public boolean mkdirs();

      3.在使用File类操作的时候路径分隔符号使用常量:public static final String separator;

posted on 2016-11-07 20:41  G-X  阅读(176)  评论(0)    收藏  举报