JAVA之File操作

File 教程

一、file 基本操作

  1. 创建File 类对象

     /**
     * 创建File 类对象
     * 路径分为:
     * 1.绝对路径:是一个完整的路径 /home/alex/IdeaProjects/learn-java/base/base/src/main/resources/data/file.txt
     * 2.相对路径:是一个简化的路径,相对指的是相对于当前项目的根目录(base/src/main/resources/data/file.txt),一般使用相对路径
     * 可以用.表示当前目录,..表示上级目录。
     * File类中获取路径的方法:
     * 1. public String getPath() :将此File转换为路径名字符串。
     * 2. public String getAbsolutePath() :返回此File的绝对路径名字符串。
     * 3. public String getParent() :返回此File的父路径名字符串。
     * 4. public File getParentFile(): 返回此File的父路径对象
     * 4. public String getName():返回由此File表示的文件或目录的名称。
     */
    public static void createFileObject() throws IOException {
        // File类传入的路径 ,既可以是相对路径,也可以是绝对路径,绝对路径是以根目录开始的完整路径 demo: 'D:\\test\\test.txt'
        // 相对路径是以当前项目的根目录开始的路径,demo: 'test\\test.txt',这里使用的是相对路径
        // 注意分隔符,windows下使用的是反斜杠,linux下使用的是正斜杠
        // 这个就是绝对路径
        // File file = new File("/home/alex/IdeaProjects/learn-java/base/base/src/main/resources/data/file.txt");
        //  这个就是相对路径
        File file = new File("./base/src/main/resources/data/file.txt");
        System.out.println("file.getName() = " + file.getName());
        System.out.println("file = " + file);
        // 因为Windows和Linux的路径分隔符不同,File对象有一个静态变量用于表示当前平台的系统分隔符: File.separatorChar这个变量表示分隔符
        System.out.println("File 分隔符为: " + File.separator);

        //获取父路径路径
        String parent = file.getParent();
        System.out.println("获取父目录路径为:" + parent);

        File parentFile = file.getParentFile();
        System.out.println("获取父路径文件对象:" + parentFile);

        File dir = new File(".");
        System.out.println("当前目录为: " + dir);
        File dir2 = new File("..");
        System.out.println("上一级目录为:" + dir2);

        System.out.println("抽象路径名转换为路径名字符串(默认调用) = " + dir.getPath());
        System.out.println("抽象路径名的绝对路径名字符串 = " + dir.getAbsolutePath());
        System.out.println("抽象路径名的规范路径名字符串: " + dir.getCanonicalPath());



    }

2. File类中判断功能的方法

    /**
     * File类判断功能的方法
     * 1. public boolean exists() :此File表示的文件或目录是否实际存在。
     * 2. public boolean isDirectory() :此File表示的是否为目录。
     * 3. public boolean isFile() :此File表示的是否为文件。
     * 注意:
     * 电脑的硬盘中只有文件/文件夹,两个方法是互斥的
     * 两个方法使用前提,路径必须是存在的,否则都返回false
     */
    public static void isJudgement() {

        File file = new File("./base/src/main/resources/data/file.txt");
        System.out.println("file.exists() = " + file.exists());
        System.out.println("file.isFile() = " + file.isFile());
        System.out.println("file.isDirectory() = " + file.isDirectory());

    }

3. file类的创建功能的方法

   /**
     * file类的创建功能的方法
     * 1. public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
     * 2. public boolean mkdir() :创建由此File表示的目录。
     * 3. public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。
     */
    public static void create() throws IOException {

        File file = new File("./base/src/main/resources/data/file.txt");
        boolean newFile = file.createNewFile(); // 创建永久文件
        System.out.println("是否创建成功: " + newFile);

        File dir = new File("tmp");
        boolean mkdir = dir.mkdir();// 创建一个文件夹
        System.out.println("文件夹创建:" + mkdir);

        File moreDir = new File("tmp/moreDir");
        boolean mkdirs = moreDir.mkdirs();// 创建多级永久文件夹
        System.out.println("多级文件夹创建: " + mkdirs);
        File temp = File.createTempFile("temp", ".txt", new File("tmp")); // 创建临时文件
        System.out.println("临时文件创建:" + temp);

        // 删除操作
        file.delete(); // 删除文件
        temp.deleteOnExit(); // 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
        moreDir.delete(); // 只能删除一个文件夹

        dir.delete();  // delete 方法只能删除一个空文件夹,如果是多个空文件夹,需要一个一个删除,后面演示


    }

4. File类中的遍历功能

 /**
     * File类的遍历功能
     * 1. public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
     * 2. public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。
     */
    public static void listFile() {

        File file = new File(".");
        String[] list = file.list();
        System.out.println("list = " + Arrays.toString(list));
        File[] files = file.listFiles(); // 不进行过滤
        System.out.println("files = " + Arrays.toString(files));

        // 使用过滤器,仅仅显示,md文件
        File[] files1 = file.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File file, String s) {

                return s.endsWith(".md");
            }
        });
        System.out.println("files1 = " + Arrays.toString(files1));

    }

5. file类中常用的方法

/**
     * file中常用的方法
     * 1. public boolean exists():文件是否存在
     * 2. public boolean delete() :删除此抽象路径名表示的文件或目录。
     * 3.public void deleteOnExit(): 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
     * 4. renameTo(File dest) :把文件重命名为指定的文件路径
     * 5. public long length() :返回由此File表示的文件的长度。
     * 6. public long lastModified() :返回此抽象路径名表示的文件上次修改的时间。
     * 7. public boolean setLastModified(long time) :设置文件最后修改时间。
     *
     */
    public static void fileMethods() throws IOException {

        File oldFile = new File("./tmp.text");
        oldFile.createNewFile();
        File newFile = new File("./tmp2.text");
        boolean b = oldFile.renameTo(newFile);
        System.out.println("重命名是否成功: " + b);
        long length = oldFile.length();
        System.out.println("length = " + length);
        newFile.delete();


    }

6. file 中文件权限操作的方法

    /**
     * File 中文件权限操作的方法
     * @throws IOException
     */
    public static void filePermissions() throws IOException {
        File file = new File("./tmp.text");
        System.out.println("file.canExecute() = " + file.canExecute());
        System.out.println("file.canRead() = " + file.canRead());
        System.out.println("file.canWrite() = " + file.canWrite());
        //方式一:
        //设置可执行权限
        file.setExecutable(true,false);
        //设置可读权限
        file.setReadable(true,false);
        //设置可写权限
        file.setWritable(true,false);
        System.out.println("file.canExecute() = " + file.canExecute());
        System.out.println("file.canRead() = " + file.canRead());
        System.out.println("file.canWrite() = " + file.canWrite());

        // 方式二:
        Runtime runtime = Runtime.getRuntime();
        try {
            Process exec = runtime.exec("chmod 777 ./tmp.text");
            exec.waitFor();
            int exitValue = exec.exitValue();
            //执行shell命令,一般返回为0 就是正常执行,如果返回值非0,说明执行出错了
            if(exitValue!=0){
                throw new RuntimeException(String.format("运行异常,错误码为:%d",exitValue));
            }
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }


    }
posted @ 2024-07-15 18:26  快乐小王子帅气哥哥  阅读(9)  评论(0编辑  收藏  举报

Loading