IO流中关于File类的操作

本文详细介绍了Java中IO流的基本概念,包括五大类和三大接口,重点讲解了File类的操作,如路径处理、构建File对象、常用方法等,以及文件和文件夹的相关操作。

        在IO流中,我们需要对数据流进行输入和输出,而文件是我们存储数据的一大载体,因此在IO流中对文件进行的操作是我们利用IO技术实现输入输出的重要方法。下面来介绍关于File类的操作。

        在IO流中主要有五大类和三大接口:

        五大类:

        1.File类(文件类)    2.InputStream类(文件输入流)    3.OutputStream类(文件输出流)    4.Reader类(字符输入流)    5.Writer类(字符输出流)

        三大接口:

        1.closeable(关闭流接口)     2.Flushable(刷新流接口)     3.Serializable(序列化接口)

        首先要明确一点,File不只指文件,也可能是文件夹,也可能是不存在的文件。因此在学习IO流前,应先对文件类的操作有基本的了解。

        了解文件类之前,先了解路径及分隔符。



一.路径,分隔符 

        1.路径:路径有绝对路径与相对路径之分

            绝对路径:带盘符的路径

            相对路径:不带盘符的路径(相对路径,都是相对于user.dir)。user.dir:Java项目的最低层文件夹,也就是用户的目录。

     下面用一段代码来测试绝对路径与相对路径:

public class TestFile03 {
    public static void main(String[] args) {
        String path = "D:/JAVA program/4dead99f67999407561e6a041f4c32d8.jpg";
        //绝对路径
        File src = new File(path);
        System.out.println(src.getAbsolutePath());  //获得绝对路径

        src = new File("D:/JAVA program/"+"4dead99f67999407561e6a041f4c32d8.jpg");
        System.out.println(src.getAbsolutePath());  //获得绝对路径
        //创建一个相对路径对象(无盘符)
        System.getProperty("user.dir");  //用户的目录
        System.out.println(System.getProperty("user.dir"));
        src = new File("4dead99f67999407561e6a041f4c32d8.jpg");
        System.out.println(src.getAbsolutePath());   //获得绝对路径,相对于user.dir

        //构建一个不存在的文件
        src = new File("aaa/IO2");
        System.out.println(src.getAbsolutePath());
    }
}

代码运行结果如下:

D:\JAVA program\4dead99f67999407561e6a041f4c32d8.jpg
D:\JAVA program\4dead99f67999407561e6a041f4c32d8.jpg
D:\JAVA program
D:\JAVA program\4dead99f67999407561e6a041f4c32d8.jpg
D:\JAVA program\aaa\IO2

           综上可知:

           user.dir输出的是用户的目录,即存储Java程序的根目录D:\JAVA Program

           可以通过getAbsolutePath()获取绝对路径

            绝对路径时相对于user.dir来说的

           也可以构建一个不存在的路径

        2.分隔符:分隔符有路径分隔符和名称分隔符

           路径分隔符:例如:"D:\JAVA program"中的":"即为路径分隔符。

           名称分隔符:例如:"D:\JAVA program"中的"\"即为路径分隔符。

           特别注意:当我们指定一个字符串为文件路径时,对于名称分隔符的处理有三种方式:

  String path = "D:\\JAVA program\\4dead99f6.jpg"; 

  String path1 = "D:/JAVA program/4dead99f6.jpg"; //推荐这种写法,可以做到跨平台

  String path2 = "D:"+ File.separator+"JAVAprogram"+File.separator+"4dead99f6.jpg";

       第一种:使用转义字符"\\"进行转义为"\",但无法实现跨平台。因为Java是跨平台的语言,而在别的平台上,"//"可能无法被识别,因此这段路径就不可读,因此无法实现跨平台。

       第二种:使用"/",这种是推荐写法,可以做到跨平台。

       第三种:也可以采用字符串拼接的方式来表示路径 separator:常量,表示与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串。但较为麻烦,不易读。



二.构建File对象

      构建File对象的常用方法有三种:

      1.利用path构建一个File对象。

      2.从父路径名字符串和子路径名字符串创建新的 File实例。

      3.从父路径名字符串和子路径名字符串创建新的 File实例。

      代码如下:

public class TestFile {
    public static void main(String[] args) {
       String path = "D:/JAVA program/4dead99f67999407561e6a041f4c32d8.jpg";
       //一.利用path构建一个File对象
       File src = new File(path);
       System.out.println(src.length());  //输出文件的大小(Byte)
       //二.从父路径名字符串和子路径名字符串创建新的 File实例。
       src = new File("D:/JAVA program/"+"4dead99f67999407561e6a041f4c32d8.jpg");
       src = new File("D:/"+"JAVA program/4dead99f67999407561e6a041f4c32d8.jpg");
       System.out.println(src.length());
       //三.从父抽象路径名和子路径名字符串创建新的 File实例。父对象,子名称
       src = new File(newFile("D:/JAVA program/"),"4dead99f67999407561e6a041f4c32d8.jpg");
       System.out.println(src.length());
    }
}


三.File类的常用方法

    第一部分:路径类

     1.file.getPath():获取文件路径。传入的是绝对路径,就获取绝对路径。传入的是相对路径,就获取相对路径。

     2.file.getName():获取文件名称

     3.file.getAbsolutePath():获取文件的绝对路径

     4.file.getParent():获得父路径。子路径前没有路径,则返回null。否则子路径前有几层路径就返回几层路径。

     5.file.getParentFile():获得父对象

        file.getParentFile().getName():获得子路径上一层的路径名称。

        file.getParentFile().getPath():父对象,返回上面的路径(包括父对象本身)。

        file.getParentFile().getAbsolutePath():获得父对象的绝对路径。

/**
* getName():名称
* getPath():是绝对就返回绝对,是相对就返回相对
* getAbsolutePath():返回绝对路径
* getParent():返回父路径。返回指定文件上面的路径,如果上面的路径不存在,就返回null
* getParent():返回父对象。父对象:上一级对象
*/
public class TestFile {
    public static void main(String[] args) {
        File file = new File("D:\\JAVA program\\4dead99f67999407561e6a041f4c32d8.jpg");
        System.out.println("名称:"+file.getName());  //获取文件名称
        System.out.println("路径:"+file.getPath()); //获取文件路径。是绝对路径就获取绝对路径,是相对路径就获取相对路径
        file = new File("4dead99f67999407561e6a041f4c32d8.jpg");
        System.out.println("路径:"+file.getPath());   //获取相对路径
        System.out.println("绝对路径:"+file.getAbsolutePath());    //获取文件的绝对路径
        file = new File("D:\\JAVA program\\4dead99f67999407561e6a041f4c32d8.jpg");
        System.out.println("父路径:"+file.getParent());   //父路径:D:\JAVA program
        file = new File("4dead99f67999407561e6a041f4c32d8.jpg");
        System.out.println("父路径:"+file.getParent());    //null   名称分隔符前面没有路径,返回空。有一层就返回一层,有多层就返回多层
        file = new File("D:\\JAVA program\\JAVA Pro10[IO01]\\src\\cn\\gjw\\gao\\IO01\\4dead99f67999407561e6a041f4c32d8.jpg");
        System.out.println("父对象:"+file.getParentFile().getName());  //父对象,返回上一级的名称:IO01
        System.out.println("父对象:"+file.getParentFile());   //获取父对象
        System.out.println("父对象:"+file.getParentFile().getPath()); //父对象,返回上面的路径(包括父对象本身)
        System.out.println("父对象:"+file.getParentFile().getAbsolutePath());  //同上

        运行结果如下:

名称:4dead99f67999407561e6a041f4c32d8.jpg
路径:D:\JAVA program\4dead99f67999407561e6a041f4c32d8.jpg
路径:4dead99f67999407561e6a041f4c32d8.jpg
绝对路径:D:\JAVA program\4dead99f67999407561e6a041f4c32d8.jpg
父路径:D:\JAVA program
父路径:null
父对象:IO01
父对象:D:\JAVA program\JAVA Pro10[IO01]\src\cn\gjw\gao\IO01
父对象:D:\JAVA program\JAVA Pro10[IO01]\src\cn\gjw\gao\IO01
父对象:D:\JAVA program\JAVA Pro10[IO01]\src\cn\gjw\gao\IO01

     第二部分:文件状态类

       1.file.exists():文件是否存在。

       2.file.isFile():是否是文件。

       3.file.isDirectory():是否是文件夹。

       代码如下:

file = new File("file\\cn\\gjw\\gao\\IO01\\4dead99f67999407561e6a041f4c32d8.jpg");
        System.out.println("是否存在:"+file.exists());   
        System.out.println("是否文件:"+file.isFile());   
        System.out.println("是否文件夹:"+file.isDirectory());  

     第三部分:文件大小,创建、删除文件

      1.file.length():获取文件,文件夹,不存在的文件的大小。

      2.file.createNewFile():创建相关文件,若存在则创建失败。

      3.file.delete():删除相关文件,若已删除或不存在则失败。

      file.length()代码如下:

public class TestFile {
    public static void main(String[] args) {
    //文件大小
        File file = new File("D:/JAVAprogram/JAVA/Pro10[IO01]/src/cn/gjw/gao/IO01/4d.jpg");
        System.out.println("长度:"+file.length());
    //文件夹大小:0
        file = new File("D:/JAVA program/JAVA Pro10[IO01]/src/cn/gjw/gao");
        System.out.println("长度:"+file.length());
    //不存在的文件:0
        file = new File("D:/JAVA program/JAVA Pro10[IO01]/src/cn/gjw/gao/IO01/4d.jpg/01");
        System.out.println("长度:"+file.length());
    }
}

      file.createNewFile(),file.delete()代码如下:

public class TestFile {
    public static void main(String[] args) throws IOException {
        File file = new File("D:/JAVA program/io.txt");
        boolean flag = file.createNewFile(); //有可能出现异常,创建失败,抛出异常即可
        System.out.println(flag);
        flag =  file.delete();
        System.out.println(flag);
        //不能创建文件夹
        file = new File("D:\\游戏\\DoyoGames\\Download\\10101072");  //由D:\游戏\DoyoGames\Download\10101071将1改为2,则会创建一个无后缀文件,而不会创建一个文件夹
        flag = file.createNewFile();  //不能再加boolean,否则会重复声明
        System.out.println(flag);

        //删除文件
        flag =  file.delete();
        System.out.println(flag);

        //con是操作系统的设备名,不能正确创建
        file = new File("D:/JAVA program/con");
        file.createNewFile();
    }
}

      特别注意:1.file.createNewFile()不能创建文件夹。

                        2.当不加文件后缀名时,系统会创建没有后缀名的文件,但不会创建文件夹。

                        3.不能将文件命名为con,因为con是操作系统的设备名,不能正确创建。

    第四部分:对文件夹的操作

      1.file.mkdirs():创建整个目录(文件夹)。

      2.file.mkdir():上一级目录(文件夹)存在,才会创建下一级目录(文件夹)。

      3.file.list():列出下一级文件和目录名称。

      4.file.listFiles():列出下一级对象。

      5.file.listRoots():列出所有盘符。

      代码如下:      

public class TestFile {
    public static void main(String[] args) {
        //mkdirs
        File file = new File("D:/JAVA program/dir/file01");
        boolean flag =  file.mkdirs();
        System.out.println(flag);
        
        //mkdir
        file = new File("D:/JAVA program/dir/file02");
        flag =  file.mkdir();    //文件夹dir存在才会创建file02,否则不会创建
        System.out.println(flag);   

        //list只返回下一层文件和目录名称
        file = new File("D:/JAVA program");
        String[] subNames = file.list();
        //增强for循环,输出JAVA program下一级的名称
        for (String names : subNames){
            System.out.println(names);
        }
        
        //listFile:返回下一层目录对象的路径
        file = new File("D:/JAVA program");
        File[] subFiles = file.listFiles();
        for (File files : subFiles){
            System.out.println(files.getAbsolutePath());
        }

        //列出所有盘符
        file = new File("D:/JAVA program");
        File[] roots = file.listRoots();
        for (File temp : roots){
            System.out.println(temp.getAbsolutePath());
        }
    }
}

欢迎批评指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值