javaSE I/O流—— File类

Posted 玛丽莲茼蒿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaSE I/O流—— File类相关的知识,希望对你有一定的参考价值。

一、 File类的特点/记忆点

  1. 关于文件和缓冲区之间的IO操作,之前在编写shell的时候已经通过C++去体会过了。现在看看是不是使用java方便了许多
  2. File类不仅可以实例化【文件】,还可以实例化【目录】
  3. File类在java.io包下
  4. File类中只涉及到文件的大小、路径、修改时间、重命名等操作,并未涉及到对文件的读写。如果要对这个文件进行读或者写,必须使用IO
  5. File类常用于:File类的对象常作为参数传递到流的构造器中,指明读取或写入的“终点”

二、File类的常用方法

2.1 构造方法

注意:new File只是在内存创建了一个File对象,和外存(硬盘)中是否有这个文件暂时无关。FIle有exists方法专门用来判断这个文件是否存在。

        //1)--------File(String 文件路径)
        File file1 = new File("september.txt"); //相对路径
        File file2 = new File("H:\\\\September\\\\2th\\\\null.txt"); //绝对路径(注意,本机根本没有H盘)
        System.out.println(file1);
        //输出:september.txt
        System.out.println(file2);
        //输出:H:\\September\\2th\\null.txt

        //2)---------File(String 父路径,String 子路径)
        File file3 = new File("H:\\\\September", "2th");
        System.out.println(file3);
        //输出:H:\\September\\2th
        
        //3)---------File(File 父对象,String 子路径)
        File file4 = new File(file3, "null.txt");
        System.out.println(file4);
        //输出:H:\\September\\2th\\null.txt

路径分隔符说明:java中使用路径分隔符和之前总结的Python中使用路径分隔符是一样的。

python Windows下路径名用‘/‘还是‘\\‘(以及和Linux的区别)_玛丽莲茼蒿的博客-CSDN博客在跑脚本的时候,Linux下可以运行的脚本到Windows下报错了,归根结底是路径的问题,所以总结一下。我们都知道,Linux下的路径分隔符是'/',而Windows下的路径分隔符是'\\'。'/'可以直接用,而'\\'不能的根源在于字符串里面\\被作为转义字符使用。一、Linux下的路径名一律用'/'。二、Windows下的路径名Windows下根据你的需求不同,有几种情况可以选择。各有利弊。为什么不固定用一种方式呢,因为每个人的需求不同嘛。就按照我自己来说,我更愿意让Whttps://blog.csdn.net/qq_44886213/article/details/123333467?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22123333467%22%2C%22source%22%3A%22qq_44886213%22%7D建议:虽然在Windows系统中,我们也可以使用Linux下的“/”。but为了避免java跨平台出错,还是规范着来,Windows下用“\\\\”,Linux下用“/”。

java提供了separator常量

2.2 文件的常用方法

  • public String getName():获取文件名
  • public boolean canRead():是否可读
  • public boolean canWrite() :是否可写
  • public boolean exists():判断是否存在
  • public long length():文件长度(单位是字节
  • public String getAbsolutePath():获取文件的绝对路径
  • public String getParent(): 获取文件的父目录
  • public boolean ifFile(): true是文件,false是目录
  • public boolean isDirectory():判断是否是一个目录
  • public boolean idHidden():是否是隐藏文件
  • public long lastModified():获取文件最后修改时间(从1970年午夜开始的毫秒数
  • public boolean renameTo(File file2):将文件重命名为file2的名字 (注意形参是一个File对象而不是String类型,这是为了防止文件重复)

2.3 目录的常用方法

  • public String[] list():以【字符串】形式返回目录下的全部文件
  • public File[] listFiles():以【File对象】形式返回目录下的全部文件
        File file = new File("F:\\\\3_零信任");
        String[] list = file.list();
        for(String li : list)
            System.out.println(li);
        

        File[] files = file.listFiles();
        for(File f : files)
            System.out.println(f.getName());
        

2.4 几个需要注意的方法

2.4.1 当文件不存在时调用常用方法需要注意的问题

当我们new一个并不存在的文件,调用getParent等方法会输出什么?

        File file1 = new File("not-exist.txt");  //硬盘中没有这个文件,相对路径
        System.out.println(file1.getAbsolutePath());
        System.out.println(file1.getPath());
        System.out.println(file1.getParent());
        System.out.println(file1.length());
        System.out.println(file1.lastModified());

        System.out.println(file1.exists()); 
        System.out.println(file1.isDirectory());
        System.out.println(file1.isFile());

        File file1 = new File("M://not-exist.txt");  //硬盘中没有这个文件,绝对路径
        System.out.println(file1.getAbsolutePath());
        System.out.println(file1.getPath());
        System.out.println(file1.getParent());
        System.out.println(file1.length());
        System.out.println(file1.lastModified());

E:\\Java Project\\helloworld\\ioStream\\not-exist.txt(绝对路径=当前java文件所在的父目录+文件名)
not-exist.txt(path直接输出文件名)
null (无父目录,输出默认值,null)
0 (无文件长度,输出默认值,0)
0 (无文件长度,输出默认值,0)

false (不存在)

false(因为不存在,所以既不是文件也不是路径)

false

M:\\not-exist.txt (绝对路径=输入的虚假路径)
M:\\not-exist.txt (path)
M:\\ (父目录=输入的虚假父目录)
0(无文件长度,输出默认值,0)
0(无文件长度,输出默认值,0)

2.4.2 重命名方法要注意3点

  1. 形参是一个File对象而不是String类型,因为String类型没法判断这个文件名是否已经存在了
  2. 要想renameTo成功执行,需要file1在硬盘中存在,file2在硬盘中不存在(file1必须存在是因为你要给它重命名它必须存在啊,file2不能存在是因为,一旦file2存在,file1重命名为file2以后名字就重复了)
        //重命名:需要file1在硬盘中存在,file2不存在,才能返回成功
        File file1 = new File("F:\\\\!\\\\not-exist.txt");
        File file2 = new File("F:\\\\!\\\\rename.txt");

        boolean b = file1.renameTo(file2);
        System.out.println(b); //返回是否重命名成功

       3. renameTo函数还有移动文件的功能(和Linux下的mv命令一样)

        //重命名:需要file1在硬盘中存在,file2不存在,才能返回成功
        File file1 = new File("F:\\\\!\\\\not-exist.txt");
        //会把原来在F:\\\\!路径下的not-exist.txt文件,
        //移动到D:\\\\!路径下的rename.txt
        File file2 = new File("D:\\\\!\\\\rename.txt");

2.4.4 创建和删除

        创建和删除文件        

        File file1 = new File("F:\\\\!\\\\new.txt");
        if(!file1.exists()) //最好养成对文件进行操作时都用exists判断一下的习惯,不过对于createNewFile方法,如果文件存在本身也会返回false
            //1)创建文件
            boolean b = file1.createNewFile();
            System.out.println(b);
        else
            System.out.println("文件已经存在");
        

        if(file1.exists())
            //2)删除文件
            file1.delete();
        

        创建目录

        File file1 = new File("F:\\\\!");  //父路径
        File file2 = new File("F:\\\\!", "dir"); //子路径
        if(file1.exists())
            //1)父路径存在,调用mkdir方法
            boolean b = file2.mkdir();
            System.out.println(b);
        else
            //2)父路径不存在,调用mkdirs方法先创建父路径
            boolean b = file2.mkdirs();
            System.out.println(b);
        

以上是关于javaSE I/O流—— File类的主要内容,如果未能解决你的问题,请参考以下文章

javaSE I/O流—— File类

javaSE I/O流—— 各种各样的流

JavaSE入门学习43:文件传输基础之I/O流

JavaSE入门学习44:文件传输基础之I/O流

Java基础之 I/O 流

File以及I/O流