java中I/O流之File文件操作类学习总结

一、具体内容

  java.io包中保存了所有的IO操作的类(原始提供的类),而在整个IO包中核心的就是五个类,一个接口

  • 文件操作类:File;
  • 流操作类:InputStream、OutputStream、Reader、Writer;
  • 一个接口:Serializable。

这里写图片描述
这里写图片描述
这里写图片描述


二、File的基本操作

  在整个java.io包中,File类是唯一一个与文件本身操作有关的类,即:通过File类可以实现文件的创建、删除、目录的列表等操作。与操作内容没有任何关系
  如果要是使用File类那么必须准备出一个合理的路径,所以在File类的构造方法定义:

  • 设置操作完整路径:public File(String pathname);在java企业开发中都会使用此方法。
  • 设置父路径与子文件:public File(String parent, String child);主要在安卓中使用。

范例:操作File
- 在使用File定义路径的时候必须要考虑分隔符的问题,记住:“\”为“\\”;

package lisy;

import java.io.File;

public class Demo {
    public static void main(String[] args) {
        //在设置路径的时候并不会判断文件的具体内容
        File file = new File("e:\\test.txt");//要操作E盘的test.txt文件
        System.out.println(file);
    }
}

  • 在File类中提供了以下几个基本的操作方法:
       1. 创建新文件:public boolean createNewFile() throws IOException;
          创建文件成功返回true,如果文件存在则无法创建,返回false,如果文件路径出错就抛出异常;
      2.判断路径是否存在:public boolean exists();
      3.删除路径:public boolean delete();
package lisy;

import java.io.File;
import java.io.IOException;

public class Demo {
    public static void main(String[] args) throws IOException {
        //在设置路径的时候并不会判断文件的具体内容
        File file = new File("e:\\test.txt");//要操作E盘的test.txt文件
        //file.createNewFile();//创建新文件
        if(file.exists()) {//文件存在
            file.delete();//删除文件
        }else {
        System.out.println(file.createNewFile());
        }
    }
}

三、File操作的问题

  拿上面的程序来讲,会存在有三个重要的问题:

问题一:

  在实际的项目开发过程之中,往往都会选择在windows下做开发,而后在Linux下做部署。对于两个操作系统而言,最为麻烦的问题在于路径分隔符问题:
  1. windows的路径分隔符:\ (反斜杆);
  2.Linux的路径分隔符:/ (正斜杆)。
  以上的程序代码,直接使用了“\\”,很明显这是windows的。为此在实际的开发过程之中,一定要记住一个原则:不要直接写上路径分隔符,在File类中定义有一个常量:public static final String separator。

File file = new File("e:"+File.separator+"test.txt");//要操作E盘的test.txt文件

问题二:

  文件的创建会存在有延迟操作:这种延迟操作很多时候是可以忽略掉的,但是也有一点不能够忽略掉,就是你刚刚删除了一个文件,而后又创建了一个文件,就有可能出现创建不了的情况。

问题三:

  如果说现在给定的路径包含有目录,那么就将无法创建,必须先存在目录后才可以创建文件。

  • 取得父路径:public File getParentFile()
  • 创建目录:public boolean mkdirs()
package lisy;

import java.io.File;
import java.io.IOException;

public class Demo {
    public static void main(String[] args) throws IOException {
        //在设置路径的时候并不会判断文件的具体内容
        File file = new File("e:"+File.separator+"hello"+File.separator+"nihao"+File.separator+"test.txt");
        //file.createNewFile();//创建新文件
        if(!file.getParentFile().exists()) {//父路径不存在(重点)
            file.getParentFile().mkdirs();//创建父目录(重点)
        }
        if(file.exists()) {//文件存在
            file.delete();//删除文件
        }else {
        System.out.println(file.createNewFile());
        }
    }
}

四、File类的其他操作

  1. 判断路径是否为目录:public boolean isDirectory();
  2. 判断路径是否为文件:public boolean isFile()
  3. 取得文件大小(字节): public long length()文件大小是以字节为单位,使用long描述。
  4. 最后一次修改日期 : public long lastModified()
package lisy;

import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.sql.Date;
import java.text.SimpleDateFormat;

public class Demo {
    public static void main(String[] args) throws IOException {
        File file = new File("e:"+File.separator+"my.jpg");
        if(file.exists()) {//文件存在
            System.out.println("是否为目录?"+file.isDirectory());
            System.out.println("是否为文件?"+file.isFile());
            System.out.println("文件大小:"+new BigDecimal((double)file.length() / 1024 /1024)
                    .divide(new BigDecimal(1),2,BigDecimal.ROUND_HALF_UP)+"M");
            System.out.println("最近修改日期:"+new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS")
                    .format(new Date(file.lastModified())));
        }
    }
}

在File中除了文件之外还会存在有文件夹,所以对于文件夹应该要进行结构的列出:

  • 列出目录:public File[]listFiles();
    范例:列出目录中的全部内容
package lisy;

import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.sql.Date;
import java.text.SimpleDateFormat;

public class Demo {
    public static void main(String[] args) throws IOException {
        File file = new File("e:"+File.separator);
        if(file.exists()&&file.isDirectory()) {//文件存在
            File result [] = file.listFiles();//列出全部的目录内容
            for(int x = 0;x<result.length;x++)  
            System.out.println(result[x]);
        }
    }
}

范例:列出目录中的全部内容。

package lisy;

import java.awt.print.Printable;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.sql.Date;
import java.text.SimpleDateFormat;

public class Demo {
    public static void main(String[] args) throws IOException {
        File file = new File("e:"+File.separator);
        print(file);
        }
    public static void print(File file) {
        if(file.isDirectory()) {//当前的路径为目录
            File result [] = file.listFiles();//进行列出操作
            if(result != null) {
                for(int x = 0;x<result.length;x++) {
                    print(result[x]);
                }
            }
        }
        System.out.println(file);
        //恶意程序别搞哦。
        //System.out.println(file.delete());这个东西千万别用 这个将删除
        //e盘下的所有内容。
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41112517/article/details/80302220