Java第二十九天,文件及目录的管理,File类

一、基础知识点

1.路径分隔符

(1)什么是路径分隔符?

这个多被应用在环境变量设置当中,例如当我设置Path环境变量时,多个环境变量的路径要用 ';'(Windows系统用封号分隔)或 ':'(Linux系统用冒号隔开)

(2)如何获取当前系统的路径分隔符

File.pathSeparator
File.pathSeparatorChar

//pathSeparator是静态方法,所以可以直接使用类名调用

2.文件名称分隔符

(1)什么是文件名称分隔符?

当我们找一个文件时,通常需要得到该文件的文件路径(用过Linux系统的人对这个感触颇深),路径当中有两个元素,一个是文件夹名,另一个是分隔符,这个分隔符就是文件名称分隔符

(2)如何获取当前系统的文件名称分隔符

File.separator
File.separatorChar;

//separator是静态方法,所以可以直接使用类名调用

3.绝对路径和相对路径

(1)相对路径:由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系

(2)绝对路径:完整的描述文件位置的路径

二、使用教程

1.构造方法

File(File parent, String child) ===> 从父抽象路径名和子路径名字符串创建新的File实例
File(String pathname) ===> 通过将给定的路径名字符串转换为抽象路径名来创建新的File实例
File(String parent, String child) ===> 从父路径名字符串和子路径名字符串创建新的File实例
File(URI uri) ===> 通过将给定的 file: URI转换为抽象路径名来创建新的File实例

import java.io.File;

public class Two {

    public static void main(String[] args) {

        File file = new File("F:\\");
        String child = new String("a.txt");
        File file1 = new File(file,child);
        System.out.println(file1);

        String parent = new String("F:\\");
        child = "b.txt";
        File file2 = new File(parent,child);
        System.out.println(file2);

        String path = new String("F:\\c.txt");
        File file3 = new File(path);
        System.out.println(file3);
    }
}

2.常用方法

File getAbsoluteFile() ===> 得到指定文件的规范File类对象

String getAbsolutePath() ===> 得到指定文件的绝对路径

String getPath ===> 得到指定文件的绝对或相对路径(根据File类对象类型决定)

String getName() ===> 返回文件或目录的名称

long length() ===> 返回文件的大小(以字节为单位,且目录没有该属性)

boolean isDirectory() ===> 判断该对象是否为目录

boolean isFile() ===> 判断该对象是否为普通文件

boolean exists() ===> 判断该文件或目录是否存在

import java.io.File;

public class Two {

    public static void main(String[] args) {

        File file = new File("F:\\lanYue\\a.txt");
        File fileTemp = new File("b.txt");

        System.out.println(file.getAbsolutePath());
        System.out.println(fileTemp.getAbsolutePath());
        System.out.println(file.getPath());
        System.out.println(fileTemp.getPath());
        System.out.println(file.getName());
        System.out.println(fileTemp.getName());
        System.out.println(file.length());
        System.out.println(fileTemp.length());
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
        System.out.println(file.exists());
    }
}

3.处理文件、目录

(1)创建文件

booleancreatelewFile() ===> 当且仅当该文件不存在时,创建新的空文件

static FilecreateTempFile(String prefix,String suffix) ===> 使用给定的前缀和后缀在默认临时目录中创建一个新的空文件

static FilecreateTempFile(String prefix,String suffix,File directory) ===>使用给定的前缀和后缀在指定的目录中创建新的空文件

(2)创建目录

boolean mkdir() ===> 创建由此抽象路径名命名的目录
boolean mkdirs() ===> 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录

public class Three {

    public static void main(String[] args) {

        File directory = new File("F:\\myData\\");
        File document = new File("info.txt");

        if(!directory.exists()){
            if(!directory.isDirectory()){
                directory.mkdirs();

                if(!(new File(directory,document.getName()).exists())){
                    try {
                        new File(directory,document.getName()).createNewFile();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

注意:无论创建文件还是目录,其指定方法已经带有相关的检测与判断功能(如果存在,则返回false,且不执行创建操作。反之......),这里引用其他功能知识为了熟悉常用的文件操作方法

(3)删除

boolean delete() 

注意:

  1. 可以用来删除目录或文件
  2. 删除非空目录会失败并且返回false
  3. 删除不存在的文件或目录会返回false
  4. 删除是直接从硬盘删除,并不会走回收站流程

void delete0nExit() ===> 程序运行deleteOnExit成功后,File并没有直接删除,而是在虚拟机正常运行结束后才会删除

public class Three {

    public static void main(String[] args) {

        File directory = new File("F:\\myData\\");
        File document = new File("info.txt");

        if(!directory.exists()){
            if(!directory.isDirectory()){
                directory.mkdirs();

                if(!(new File(directory,document.getName()).exists())){
                    try {
                        new File(directory,document.getName()).createNewFile();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }

        System.out.println(new File(directory,document.getName()).delete());
    }

4.遍历

String[] list() ===> 返回一个字符串数组,遍历目录中的文件和目录

File[] listFiles() ===> 返回一个File类数组,遍历目录中的文件

import java.io.File;
import java.io.IOException;

public class All {
    public static void main(String[] args) {
        createFiles();
        showFiles();
        showFilesStruct(new File("F:\\"));
        delete();
    }

    private static void createFiles(){
        File directory = new File("F:\\");
        String file;

        for (int i = 100; i <= 200; i++) {
            try {
                file = String.valueOf(i) + ".txt";
                new File(directory,file).createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private static void showFiles(){
        File directory = new File("F:\\");
        File[] files = directory.listFiles();
        for (File file : files) {
            System.out.println(file);
        }
    }

    private static void showFilesStruct(File directory){
        File[] files = directory.listFiles();
        if(files != null){
            System.out.println("非空目录:" + directory.getName());
            for (File file : files) {
                if(file.isDirectory()){
                    showFilesStruct(file);
                }else{
                    System.out.println("文件:" + file.getAbsoluteFile());
                }
            }
        }else{
            System.out.println("空目录:" + directory.getName());
        }
    }

    private static void delete(){
        File directory = new File("F:\\");
        File[] files = directory.listFiles();
        for (File file : files) {
            file.delete();
        }
    }
}

5.修改文件/目录名

boolean renameTo(File dest) ===> 重命名由此抽象路径名表示的文件

注意:

1.重命名成功会返回true,失败会返回false

2.重命名一定程度上可以起到移动的功能

3.移动时,只能把目标文件或目录移动到已存在目录下,否则会失败

import java.io.File;
import java.io.IOException;

public class ReName {
    public static void main(String[] args) {
        File oldFile = new File("F:\\old.txt");
        try {
            oldFile.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            Thread.sleep(1500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        File newFile = new File("F:\\new.txt");
        System.out.println(oldFile.renameTo(newFile));
    }
}
发布了304 篇原创文章 · 获赞 74 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/ITlanyue/article/details/104233775