Loading

Java I/O 之文件操作

Java I/O

Java 附带了许多方便的I/O 类来支持通过字节流和文件系统的输入和输出。这是 Java I/O 示例的列表,包括文件、临时文件和目录操作、编码、序列化以及使用 zip 或 Gzip 压缩。

文件

文件示例列表,显示使用 Java I/O 创建、读取、写入、修改文件和获取文件信息

  • 创建文件
  • 构建文件路径
  • 设置文件权限
  • 使用 BufferedInputStream 读取文件
  • 使用 BufferedReader 读取文件
  • 使用 FileOutputStream 写入文件
  • 使用 BufferedWriter 写入文件
  • 将内容附加到文件
  • 删除文件
  • 仅删除具有特定扩展名的文件
  • 仅查找具有特定扩展名的文件
  • 重命名文件
  • 复制文件
  • 将文件移动到另一个目录
  • 获取文件创建日期
  • 获取文件上次修改日期
  • 更改文件上次修改日期
  • 使文件只读
  • 获取文件大小
  • 获取文件的文件路径
  • 获取文件的总行数
  • 检查文件是否存在
  • 检查文件是否隐藏
  • 从文件中读取 UTF-8 编码的数据
  • 将 UTF-8 编码的数据写入文件
  • 将文件内容分配给变量
  • 生成文件校验和值
  • 将 File 转换为字节数组
  • 将字节数组转换为文件
  • 将字符串转换为输入流
  • 将输入流转换为字符串
  • 将文件转换为十六进制
  • 获取分区或卷中的总可用磁盘空间

在Java中创建并写入文件

使用 Files.newBufferedWriter

    @Test
    public void testCreateFile(){
        String content = "啊啊啊~";

        String fileName = "C:\\rzk\\newFile.txt";
        Path path = Paths.get(fileName);

        try {
            Files.write(
                    //获取地址
                    path,
                    content.getBytes(StandardCharsets.UTF_8));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Paths.get(文件地址)如果文件不存在,会自动创建文件(前提地址要正确)
Paths.get的源码

在已写入的文件后尾追加信息

            Files.write(
                    //获取地址
                    path,
                    content.getBytes(StandardCharsets.UTF_8),
                    //在文件后尾追加
                    StandardOpenOption.APPEND);

啊啊啊啊啊啊啊啊~

write可使用list

        String fileName = "C:\\rzk\\newFile.txt";
        Path path = Paths.get(fileName);
        List<String> list = Arrays.asList("1","2","3","4");
        try {
            Files.write(
                    path, list,
                    StandardCharsets.UTF_8);
        } catch (IOException e) {
            e.printStackTrace();
        }

删除文件

使用NIO删除文件delete

    @Test
    public void writeTest(){
        String fileName = "C:\\rzk\\newFile.txt";
        String content = "我是世界主宰!!!";
        try {
            Path paths = Paths.get(fileName);
            Files.write(paths, content.getBytes(StandardCharsets.UTF_8));

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void deleteTest(){
        String fileName = "C:\\rzk\\newFile.txt";
        Path path = Paths.get(fileName);
        try {
            Files.delete(path);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

但是如果文件不存在会抛NoSuchFileException异常 java.nio.file.NoSuchFileException: C:\rzk\newFile.txt

使用NIO删除文件deleteIfExists

deleteIfExists有返回boolean类型,不会像delete文件不存在会报空异常

    @Test
    public void deleteTest(){
        String fileName = "C:\\rzk\\newFile.txt";
        Path path = Paths.get(fileName);
        try {
            boolean exists = Files.deleteIfExists(path);
            if (exists==true){
                System.out.println("删除成功");
            }else {
                System.out.println("删除失败或者文件不存在");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

使用IO删除文件

    @Test
    public void delete1Test(){
        String fileName = "C:\\rzk\\newFile.txt";
        File file = new File(fileName);
        if (file.delete()){
            System.out.println("删除成功");
        }else{
            System.out.println("删除失败");
        }
    }

复制移动

复制

使用nio

    @Test
    public void copyTest(){
        String fileName = "C:\\rzk\\newFile.txt";
        String copyToFile = "C:\\rzk\\copyToFile.txt";

        Path path = Paths.get(fileName);
        Path path1 = Paths.get(copyToFile);


        try {
            Files.copy(path,path1);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

使用原生io流

    @Test
    public void copyTest1() throws IOException {
        InputStream inputStream = null;
        OutputStream outputStream = null;
        String fileName = "C:\\rzk\\newFile.txt";
        String copyToFile = "C:\\rzk\\copyToFile.txt";

        File fromFile = new File(fileName);
        File toFile = new File(copyToFile);

        inputStream = new FileInputStream(fromFile);
        outputStream = new FileOutputStream(toFile);


        byte[] bytes = new byte[1024];

        int length;
        while ((length = inputStream.read(bytes)) > 0 ){
            outputStream.write(bytes,0,length);
        }
    }

移动

    @Test
    public void moveTest(){
        String fileName = "C:\\rzk\\newFile.txt";
        String copyToFile = "C:\\rzk\\Users.txt";

        Path path = Paths.get(fileName);
        Path path1 = Paths.get(copyToFile);


        try {
            Files.move(path,path1);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

文件是否存在

Files.exists(path)来测试一个文件是否存在,path 可以是目录或文件,
所以加上判断不是目录以确保现有文件不是目录!Files.isDirectory(path)

    public static void main(String[] args) {
        Path path = Paths.get("C:\\rzk\\Users.txt");
        //文件存在,并且不是目录
        if (Files.exists(path) && !Files.isDirectory(path)){
            System.out.println("Files 存在");
        }else System.out.println("Files 不存在");
    }

使用Files.exises

    public static void main(String[] args) {
        Path path = Paths.get("C:\\rzk\\Users.txt");
        //文件存在,并且不是目录
        if (Files.exists(path)){
            //是否为普通文件
            if (Files.isRegularFile(path)){
                System.out.println("文件存在");
            }
            //是否是目录
            if (Files.isDirectory(path)){
                System.out.println("该文件不存在,但是它是目录");
            }
        }else System.out.println("Files 不存在");
    }

提供了一个测试文件不存在

        if (Files.notExists(path)){
            System.out.println("文件不存在");
        }

获取文件大小

    public static void main(String[] args) {
        String fileName = "C:\\rzk\\Users.txt";
        printFileSizeNIO(fileName);
    }

    public static void printFileSizeNIO(String fileName){
        Path path = Paths.get(fileName);

        try {
            Long bytes = Files.size(path);
            System.out.println(String.format("%,d bytes",bytes));
            System.out.println(String.format("%,d kilobytes",bytes/1024));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

创建目录

    public static void main(String[] args) {

        Path path = Paths.get("c:\\rzk1\\123\\321");
        try {
            Files.createDirectories(path);
            System.out.println("目录创建成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
posted @ 2021-12-25 17:06  Rzk  阅读(103)  评论(0编辑  收藏  举报