1. File类

1.1 File类的介绍

File类是属于java.io.File包下的,File类的一个对象,代表了一个文件或者一个文件目录(俗称文件夹)

1.2 File类的实例创建

在介绍File类的实例创建前,得需要先讲一下相对路径与绝对路径

相对路径:相较于某个路径下指明的路径,即是相对路径

绝对路径:绝对路径即包含了盘符(d:\)在内的文件或文件目录的路径

我们File类在创建时,常用的的构造方法有以下三种:

第一种是直接输入对应的字符串来表示文件的位置

@Test
    public void test1(){
        //构造器一
       File file1=new File("hello.txt"); //相对于当前module
       File file2=new File("D:\\Git\\java\\JavaSenior\\day_05\\he.txt"); //绝对路径
       System.out.println(file1);
       System.out.println(file2);
    }

第二种是使用字符串来表示文件目录

//构造器二
        File file3=new File("D:\\Git\\java","JavaSenior");//文件目录
        System.out.println(file3);

第三种是在某一文件目录下的某一文件

//构造器三
        File file4=new File(file3,"hi.txt"); //相当于在JavaSenior下面的一个文件
        System.out.println(file4);

1.3 File类的常用方法

/*
    适用于文件目录:
    public String[] list():获取指定目录下的所有文件或者文件目录的名称数组
    public File[] listFiles():获取指定目录下的所有文件或者文件目录的File数组
      */
    @Test
    public void test2(){
        File file1=new File("hello.txt");
        File file2=new File("D:\\io\\hi.txt");
        System.out.println(file1.getAbsolutePath());//获取绝对路径
        System.out.println(file1.getPath());  //获取路径
        System.out.println(file1.getName()); //获取名字
        System.out.println(file1.getParent()); //获取上层文件目录,若无,返回null
        System.out.println(file1.length()); //获取文件长度(字节数),不能获取目录的长度
        System.out.println(file1.lastModified()); //获取最后一次的修改时间,返回值为毫秒数
}
public boolean isDirectory():判断是否是文件目录
public boolean isFile():判断是否是文件
public boolean exists():判断是否存在
public boolean canRead():判断是否可读
public boolean canWrite():判断是否可写
public boolean isHidden():判断是否隐藏


 
    创建硬盘中对应的文件或文件目录:
    public boolean creatNewFile():创建文件。若文件存在,则不创建,返回false
    public boolean mkdir():创建文件目录.如果目录存在,则不创建
    public boolean mkdirs():创建文件目录,如果上层文件目录不存在,一并创建
    删除磁盘中的文件或文件目录
    public boolean delete():删除文件或文件夹
    注:Java中的删除不走回收站

2 InputStream和OutStream的使用

2.1 InputStream和OutStream的介绍

首先,在java中,按照数据单位的不同,可以分为字节流以及字符流,若是按照流向的不同,可以分为输入流和输出流,其中InputStream就是属于字节输入流,而OutStream就属于字节输出流

2.2 InputStream和OutStream的使用

首先InputStream是一个抽象基类,我们常常使用InputStream的实现类FileInpustream类来进行实例化,OutStream我们也常常使用FileOutputStream进行实例化,其基本使用步骤可以分为

(以下以InputStream为例)

1.造文件

File file = new File("hello.txt");

2.造流

FileInputStream fs=new FileInputStream(file);

3.读数据

byte[] buffer = new byte[5];
            int len; //记录每次读取的字节个数
            while ((len = fs.read(buffer)) != -1)
            {
                String str=new String(buffer,0,len);
                System.out.print(str);
            }

注:read操作一次会读取文件中的一个字节,但读取到空的时候会返回-1

4.关闭资源

if(fs!=null) {
                    fs.close();
}

为了保证流资源一定能够被关闭,我们常常使用try-catch-finally语句来进行流的操作

同时要记得处理文件操作时出现的异常,整体代码如下:

public void test() {
        FileInputStream fs=null;
        try {
            //1.造文件
            File file = new File("hello.txt");
            //2.造流
            fs = new FileInputStream(file);
            //3.读数据
            byte[] buffer = new byte[5];
            int len; //记录每次读取的字节个数
            while ((len = fs.read(buffer)) != -1)
            {
                String str=new String(buffer,0,len);
                System.out.print(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.关闭资源
            try {
                if(fs!=null) {
                    fs.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}