zoukankan      html  css  js  c++  java
  • 文件操作File类

    File类的使用

    java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关

    File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。 如果需要访问文件内容本身,则需要使用输入/输出流
    
        想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对 象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录
    
    File对象可以作为参数传递给流的构造器

    在使用File操作文件的时候需要先创建File对象, File的创建需要使用File的构造器

    创建File的三种方式;(调用其构造器)
    
    File = new File(pathname:"文件名");
    
    
    文件名可以使用相对路径或者绝对路径
    相对路径:相较于当前目录或者某一个指定的目录下的文件路径
    
    绝对路径: 包含盘符在内的文件或文件目录的路径


    使用Idea中;
      如果大家开发中使用Juint中的单元测试方法测试,相对路径即为当前Module下
      如果大家使用main()方法测试,相对路径即为当前Project下
    使用Eclipse中
      不管使用Juint还是main()方法测试,相对路径都是当前Project下

    File创建的三种方式

    方式一: 
            File file = new File(文件名);  // 相对路径
    
            File file = new File("路径+名称”) // 绝对路径
    
    
    方式二: 
    
              File file = new File(String Parent, String Child);
              以parent为父路径,child为子路径创建File对象
    
              File file = new File("D:\FileOne", "IO"); // 创建一个D盘下的FileOne目录下的 IO文件,其中FileOne是Parent父路径
    
    方式 三:
               File file = new File(File parent, String child); 
               根据一个父File对象和子文件路径创建File对象
    
                File fileOne = new File(文件1);
                File fileTwo = new File(fileOne, 文件2);



    eg:

            // 方式一
            //创建一个存在的目录下的文件(绝对路径)
            File fileOne = new File("E:\Tool\Java\BasiceCodes\basiceCodeMay\src\June\JuneNine\JuneNineAfternoon\TestOne.txt");
    
            //创建一个不存在的目录下的文件,(相对路径)
            File fileTwo = new File("fake.txt");
    
    
    
            //方式二
    
            // 绝对路径创建文件
            File fileThree = new File("E:\Tool\Java\BasiceCodes\basiceCodeMay\src\June\JuneNine\JuneNineAfternoon","TestTwo.txt");
            
            // 方式三
            File fileFour = new File(fileThree,"textThree.txt");  // 创建一个file3下的textThree.txt文件
    
    
    // 此时还未涉及到文件真实的内容可以暂时理解为仅仅是创建了两个File对象 对象的内容是给定的文件名

    // 现在只是界面的展示 还没有涉及文件内容的操纵所以 没有真实存在的文件也可以

    路径分隔符

     路径中的每级目录之间用一个路径分隔符隔开。 
     路径分隔符和系统有关: 
     windows和DOS系统默认使用“”来表示 
     UNIX和URL使用“/”来表示 
     Java程序支持跨平台运行,因此路径分隔符要慎用

    File类的操作方法

    当我们创建完File之后要操作创建的文件或者目录的话提供的有专用的方法

     File类的获取功能 
         public String getAbsolutePath():获取绝对路径     
         public String getPath() :获取创建时设置的路径,如果创建时时按照相对路径,仅仅获取的时是文件名,如果创建时是按照绝对路径设置的,获取的就是绝对路径+文件名 
         public String getName() :获取名称 
         public String getParent():获取上层文件目录路径。若无,返回null 
         public long length() :获取文件长度(即:字节数)。不能获取目录的长度。     
         public long lastModified() :获取最后一次的修改时间,毫秒值
    
    
       如下的两个方法适用于文件目录:
         public String[] list() :获取指定目录下的所有文件或者文件目录的名称数组 
         public File[] listFiles() :获取指定目录下的所有文件或者文件目录的File数组
        
    File类的重命名功能 
    public boolean renameTo(File dest):把文件重命名为指定的文件路径 File类的判断功能  public boolean isDirectory():判断是否是文件目录  public boolean isFile() :判断是否是文件  public boolean exists() :判断是否存在  public boolean canRead() :判断是否可读  public boolean canWrite() :判断是否可写  public boolean isHidden() :判断是否隐藏 File类的创建功能  public boolean createNewFile() :创建文件。若文件存在,则不创建,返回false  public boolean mkdir() :创建文件目录。如果此文件目录存在,就不创建了。 如果此文件目录的上层目录不存在,也不创建。  public boolean mkdirs() :创建文件目录。如果上层文件目录不存在,一并创建 注意事项:如果你创建文件或者文件目录没有写盘符路径,那么,默认在项目 路径下。 File类的删除功能  public boolean delete():删除文件或者文件夹 删除注意事项: Java中的删除不走回收站。 要删除一个文件目录,请注意该文件目录内不能包含文件或者文件目录

    getPath()

            File file = new File("E:\Tool\Java\TestIo","testOne.txt");
            File fileOne = new File("testTwo.txt");
    
            System.out.println(file.getPath());  // 因为创建时按照绝对路径创建的,所以获取文件的路径也是绝对路径 , E:ToolJavaTestIo	estOne.txt
            System.out.println(fileOne.getPath());  //创建时时相对路径获取时也是相对路径 testTwo.txt

    getParent()获取文件的上一级

    当文件不存在时也可以获取到其父级,因为现在只是对象的创建可以理解为只是一堆字符串

    当创建的文件不存在也可以获取到上一级的目录,因为当前创建仅仅是停留在界面显示,并不是操作文件内的内容
    
            System.out.println(file.getParent()); // 获取上一级目录名称  E:ToolJavaTestIo
    
            File fileThree = new File("E:\To","fake.txt"); // 创建一个不存在目录下的文件
            System.out.println(fileThree.getParent());  // E:To

    length() 获取文件的长度

            File fileFour = new File("File.txt");
            File fileFive = new File("E:\Tool\Java\TestIo","FileIo.txt");
    
            System.out.println(fileFour.length());  // 文件不存在长度为0
            System.out.println(fileFour.getPath());  // File.txt
            System.out.println(fileFive.length());  // 因为已经创建了文件并写入了内容所以长度为10

    eg:

            File file = new File("E:\Tool\Java\TestIo","testOne.txt");
            File fileOne = new File("testTwo.txt");
            System.out.println(file.getAbsolutePath()); //获取文件的绝对路径
            System.out.println(file.getPath());  // 获取文件的路径 , E:ToolJavaTestIo	estOne.txt
            System.out.println(fileOne.getPath());  // testTwo.txt
    
            System.out.println(file.getName());  // 获取文件名
            System.out.println(file.getParent()); // 获取上一级目录名称  E:ToolJavaTestIo
    
            File fileThree = new File("E:\To","fake.txt"); // 创建一个不存在目录下的文件
            System.out.println(fileThree.getParent());  // E:To
            File fileFour = new File("File.txt");
            File fileFive = new File("E:\Tool\Java\TestIo","FileIo.txt");
    
            System.out.println(fileFour.length());  // 文件不存在长度为0
            System.out.println(fileFour.getPath());  // File.txt
            System.out.println(fileFive.length());  // 因为已经创建了文件并写入了内容所以长度为10
    
            System.out.println(fileFive.lastModified()); // 获取文件的最后操作时间  1591698031582

    list()与listFiles()

    两者都是查看目录下的所有的所有的文件

    list() : 返回的是String[]类型 并且是只返回目录下的文件名

    listFiles() : 返回的是File[] 类型,并且返回的文件名带上绝对路径

        @Test
        public void TestFour(){
    
            // 因为时获取的目录下的所有文件,所以当目录不存在的时候会报错空指针异常 :java.lang.NullPointerException
            File fileOne = new File("E:\Tool\Java\TestIo");
            File fileTwo = new File("JuneEightAfternoon");  // 不存在的文件
            String [] strings = fileOne.list();
            for (String str:strings
                 ) {
                System.out.println(str.toString()); // FileIo.txt
            }
    
    
            String [] strings1 = fileTwo.list();  // 因为文件目录不存在报错 :java.lang.NullPointerException
            for (String s:strings1
                 ) {
                System.out.println(s.toString());
            }
    
    
            // listFiles() 获取目录下的所有的文件只不过返回的时File[] 类型的,结果时以绝对路径的方式返回
           File [] files =  fileOne.listFiles();
            for (File f: files
                 ) {
                System.out.println(f.toString());  // E:ToolJavaTestIoFileIo.txt
            }
        }

    文件重命名renameTo()

    renameTo(file) 把文件重名为指定的文件路径
    eg : fileOne.renameTo(fileTwo);
    要想保证返回为True,需要fileOne在硬盘中实际存在,而fileTwo不能实际存在
    如果fileTwo存在就是会报错
       /*  renameTo(file) 把文件重名为指定的文件路径
        eg : fileOne.renameTo(fileTwo);
                要想保证返回为True,需要fileOne在硬盘中实际存在,而fileTwo不能实际存在
                如果fileTwo存在就是会报错
         */
        @Test
        public  void TestFive(){
            File fileOne = new File("E:\Tool\Java\TestIo\File.txt");
            File fileTwo = new File("E:\Tool\Java\TestIo\io.txt"); // 需要时一个假文件,如果真实存在就会报错
            boolean renameTo = fileOne.renameTo(fileTwo);
            System.out.println(renameTo);
        }
     File类的判断功能
        @Test
        public void TestSix(){
            File fileOne = new File("E:\Tool\Java\TestIo");
            System.out.println(fileOne.isDirectory()); // 判断是否时目录(文件夹)
            System.out.println(fileOne.isFile()); // 判断是否时文件
            System.out.println(fileOne.exists()); // 判断是否存在
            System.out.println(fileOne.canRead()); // 是否可读
            System.out.println(fileOne.canWrite()); // 是否可写
            System.out.println(fileOne.isHidden()); // 是否是隐藏
        }
    File文件的创建功能

    createNewFile() 文件不存在的时候就创建 返回Boolean
        @Test
        public void TestSeven() throws IOException {
            File fileOne = new File("E:\Tool\Java\TestIo\io.txt");
            System.out.println(fileOne.createNewFile());  // 文件存在则不创建  不存在就创建 使用方法必须继承 throws IOException
        }

    创建目录: mkdir(), mkdirs();

        @Test
        public void TestEight(){
            File fileOne = new File("E:\Tool\Java\TestIo\TestOne");
            System.out.println(fileOne.mkdir());  // 创建目录
            
            fileOne.mkdirs(); // 创建目录当此目录,如果他的上级目录也不存在也可以创建 
            
        }

    delete() 删除目录或者文件

        @Test
        public void TestNine(){
            File fileOne = new File("E:\Tool\Java\TestIo\TestOne");
            System.out.println(fileOne.delete());  // 删除此目录
        }

    File dir1 = new File("D:/IOTest/dir1");
         if (!dir1.exists()) { // 如果D:/IOTest/dir1不存在,就创建为目录         
         dir1.mkdir(); } 
    
    
    // 创建以dir1为父目录,名为"dir2"的File对象 
    
    File dir2 = new File(dir1, "dir2"); 
        if (!dir2.exists()) { // 如果还不存在,就创建为目录 
        dir2.mkdirs(); 
        } 
    
    File dir4 = new File(dir1, "dir3/dir4"); 
        if (!dir4.exists()) { 
        dir4.mkdirs(); 
        } 
    // 创建以dir2为父目录,名为"test.txt"的File对象 
    File file = new File(dir2, "test.txt"); 
        if (!file.exists()) { // 如果还不存在,就创建为文件 
        file.createNewFile(); 
    } 

    eg:

        @Test
        public void TestTwn() throws IOException {
            File fileOne = new File("E:\Tool\Java\TestIo\TestIoTest");
            if(!fileOne.exists()){ // 如果不存在
                fileOne.mkdirs();
                System.out.println("创建成功");
            }else {
                fileOne.delete();
                System.out.println("删除成功");
            }
    
            File fileTwo = new File("E:\Tool\Java\TestIo","TestFile.txt");
            if(!fileTwo.exists()){  // 如果不存在就创建此文件
                fileTwo.createNewFile();
            }
    
        }
     Practices:

    1:  创建一个与a.txt文件同目录下的另外一个文件b.txt
        @Test
        public void TestEleven() throws IOException {
            File fileOne = new File("E:\Tool\Java\BasiceCodes\basiceCodeMay\src\June\JuneNine\JuneNineAfternoon\a");
            System.out.println(fileOne.getPath());
    
            File fileTwo = new File(fileOne.getParent(),"b.txt");
            fileTwo.createNewFile();
            if(fileTwo.exists()){
                System.out.println("创建成功");
            }
            System.out.println(fileTwo.getPath());
        }
    创建一个与a.txt文件同目录下的另外一个文件b.txt
    
    

    2: 利用File构造器,new 一个文件目录file

       1)在其中创建多个文件和目录

       2)编写方法,实现删除file中指定文件的操

        @Test
        public void TestTwelve(){
            File fileOne = new File("E:\Tool\Java\BasiceCodes\basiceCodeMay\src\June\JuneTen");
            fileOne.mkdirs();
            System.out.println("创建成功");
        }
    
    
        @Test
        public void TestThirteen(){
            File fileOne = new File("E:\Tool\Java\BasiceCodes\basiceCodeMay\src\June\JuneTen");
            System.out.println(fileOne.delete());
            System.out.println("删除成功");
        }

    3:判断指定目录下是否有后缀名为.png的文件,如果有,就输出该文件名称

        @Test
        public void TestFourteen(){
            File fileOne = new File("E:\Tool\Java\BasiceCodes\basiceCodeMay\src\June\JuneTen");
            String [] str = fileOne.list();
            for (String s:str
                 ) {
                if(s.endsWith(".png")){
                    System.out.println(s);
                }
            }
        }
    判断指定目录下是否有后缀名为.png的文件,如果有,就输出该文件名称

    4: 遍历指定目录所有文件名称,包括子文件目录中的文件。

      拓展1:并计算指定目录占用空间的大小

      拓展2:删除指定文件目录及其下的所有文件

    public class JuneNineAfternoonFileTestPracticeOne {
        public static void main(String[] args) {
            File fileOne = new File("E:\Tool\Java\BasiceCodes\basiceCodeMay\src\June\JuneTen");
    //        printSubFile(fileOne);
            System.out.println(printSubDirectory(fileOne));
    
        }
    
        // 递归:文件目录
        /** 打印出指定目录所有文件名称,包括子文件目录中的文件 */
        // 遍历指定目录所有文件名称,包括子文件目录中的文件。
        public static void printSubFile(File fileOne){
            File[]  file = fileOne.listFiles();
            for (File f:file
                 ) {
                if(f.isDirectory()){
                    printSubFile(f); // 递归遍历
                }else{
                    System.out.println(f.getAbsolutePath());
                }
            }
        }
    
    
        //拓展1:并计算指定目录占用空间的大小
        // file是文件,那么直接返回file.length()
        // file是目录,把它的下一级的所有大小加起来就是它的总大小
        public  static long printSubDirectory(File file){
            long size = 0;
            if(file.isFile()){
                return  file.length();
            }else {
                File [] files = file.listFiles();
                for (File f: files
                     ) {
                    if(f.isFile()){
                        size += f.length();
                    } else {
                        printSubDirectory(f);
                    }
                }
            }
            return size;
        }
    
    
    
        @Test
        public static void printDeDirectory(File file){
            if(file.isDirectory()){
                File [] files = file.listFiles();
                for (File f:files
                ) {
                    if(f.isDirectory()){
                        printDeDirectory(f);
                    }
                }
            }
            // 删除自己
            file.delete();
        }
    }
    View Code


    .
  • 相关阅读:
    javascript数据类型转换
    javascript运算符
    数据类型
    第一个JavaScript代码
    Javascript简介
    z-index
    Java代码优化
    Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?
    java中继承条件下构造方法的执行过程
    java中的继承、重载和覆盖是什么意思
  • 原文地址:https://www.cnblogs.com/zhaoyunlong/p/13079785.html
Copyright © 2011-2022 走看看