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()))); } } }
测试结果:
以上代码的目的: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]); } } } }
运行结果:
此时运行已经能够列出目录下的内容,但是这里列出的目录下的子目录或者是文件的名字。
列出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]); } } } }
运行结果:
总结:
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;



浙公网安备 33010602011771号