文件操作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


.
原文地址:https://www.cnblogs.com/zhaoyunlong/p/13079785.html