Java io 模块

76 阅读2分钟
package com.Ioooo;

import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;

public class fileOjb {
    /*
    * Java的标准库 java.io 提供了 File 对象来操作文件和目录。
    * */
    public static void main(String[] args) throws IOException {
        /*
        * Windows 使用 \ 作为路径分隔符,在Java字符串中需要使用 \ 表示一个 \
        * Linux 平台使用 / 作为路径分割符
        * */
        File f = new File("D:\project\JavaSE\fileooo");
        System.out.println(f);
        /*
        * File对象有3种形式表示的路径
        *   - getPath() 返回构造方法传入的路径
        *   - getAbsolutePath() 返回绝对路径
        *   - getCanonicalPath()    和绝对路径相似,但是返回的是规范路径
        *   绝对路径和规范路径区别:
        *       绝对路径:C:\Windows\System32..\notepad.exe
        *       规范路径:C:\Windows\notepad.exe
        * 因Windows和Linux的路径分割符不同,File对象有一个静态变量用于表示当前平台的系统分隔符
        *   File.separator  根据当前平台打印 \ or /
        * */

        /*
        * 文件和目录
        *   File 对象即可表示文件,也可表示目录。构造 File 对象不会导致磁盘操作。只有当我们调用 File 对象的某些方法的时候,才会进行。
        *   isFile() 判断 File 对象是否是一个已存在的文件
        *   isDirectory() 判断 File 对象是否是一个已存在的目录
        * */
        System.out.println(f.isFile());

        /*
        * 判断文件的权限和大小
        *   - boolean canRead() 是否可读
        *   - boolean canWrite() 是否可写
        *   - boolean canExecute() 是否可执行
        *   - boolean length() 文件字节大小
        *   对于目录而言,是否可执行表示能否列出它包含的文件和子目录。
        * */

        // 创建文件
        File file = new File("D:\project\JavaSE\file2.txt");
        if(!file.isFile()){
            System.out.println("文件不存在,即将创建:"+file.getAbsolutePath());
            file.createNewFile();
            System.out.println("现在文件存在么:"+file.isFile());
            System.out.println("开始删除文件");
            file.delete();
            System.out.println("文件还存在么:"+file.isFile());
        }
        /*
        * File 对象提供了 createTempFile() 创建临时文件,以及 deleteOnExit() 在JVM退出时自动删除该文件。
        * */

        /*
        * 遍历文件和目录
        * 使用 list() 和 listFiles() 列出目录下的文件和子目录名。listFile()提供一系列重载方法,可以过滤不想要的文件。
        * */
        File file2 = new File("D:\project\JavaSE\day3\src\com");
        String[] fs1 = file2.list();
        File[] fs2 = file2.listFiles();
        System.out.println(Arrays.toString(fs1));
        fileOjb.printFiles(fs2);

        /*
        * 目录的创建和删除
        *   - boolean mkdir()   创建当前 file 对象表示的目录
        *   - boolean mkdirs()  创建当前 file 对象表示的目录,并在必要时将不存在的父目录也创建出来。
        *   - boolean delete()  删除当前 file 对象表示的目录,只能当前目录为空的情况下才能删除。
        * */

        /*
        * Path 对象
        *   它位于 java.nio.file 包,Path 和 file 对象相似,但操作更加简单。
        * */
        System.out.println("=============path=============");
        Path p1 = Paths.get(".","project","study"); // 构造一个Path对象
        System.out.println(p1);
        Path p2 = p1.toAbsolutePath();// 绝对路径
        System.out.println(p2);
        Path p3 = p1.normalize(); // 规范路径
        System.out.println(p3);
        File file3 = p3.toFile();  // 转换成 File 对象
        System.out.println(file3);
        for (Path p : Paths.get("..").toAbsolutePath()){
            System.out.println("path>>"+p);
        }

    }

    public static void printFiles(File[] files){
        System.out.println("======打印文件=======");
        if(files != null){
            for (File f : files){
                System.out.println(f);
            }
        }
        System.out.println("======打印文件=======");
    }
}