• java nio 的使用


    java nio 用法

    package com.example.javademo.file;
    
    import com.example.javademo.JavaDemoApplicationTests;
    import org.junit.Test;
    import org.springframework.util.FileSystemUtils;
    
    import java.io.File;
    import java.io.IOException;
    import java.nio.file.*;
    import java.nio.file.attribute.BasicFileAttributes;
    import java.util.Arrays;
    
    public class PathTest extends JavaDemoApplicationTests {
    
    
        /**
         * 创建目录
         * @throws IOException
         */
        @Test
        public void createDirectory() throws IOException {
            //获取path直接创建 C:/test
            System.out.println(Files.createDirectory(Paths.get("C:/test")));
             //创建多层次的目录   可以在path之后添加路径  C:/test/tt
            System.out.println(Files.createDirectories(Paths.get("C:/test/aa").resolve("tt")));
            /**
             * 创建临时目录: 历史目录是在你的系统中个人用户的临时文件夹下创建
             */
    
            //如果不加系统根目录 ,默认添加到系统用户的临时文件中  C:UserslcmAppDataLocalTempaa4464090953349324592
            System.out.println(Files.createTempDirectory("aa"));
            // 1. 添加了根目录就会在根目录下生成文件  C:	est	em8169131100444631705.txt  2.如果不添加first  那么就会在项目根目录下创建一个文件  tem2136575820052041908.txt
            System.out.println(Files.createTempFile(Paths.get("/test"),"tem",".txt"));
    
        }
    
        /**
         * 删除目录
         * @throws IOException
         */
        @Test
        public void deleteDirectory() throws IOException {
            /*//普通删除一个目录
            Files.delete(Paths.get("C:/test/aa/tt"));*/
            //删除指定目录  如果存在就删除,只能删除空的目录
            File file = new File("C:/test/aa");
            if (file.isFile()){
                file.delete();
            }
    
            Arrays.asList(file.listFiles()).forEach(FileSystemUtils::deleteRecursively);
            //System.out.println(Files.deleteIfExists(Paths.get("C:/test/aa")));
        }
    
    
        /**
         * 获取指定目录下的所有文件 Files.list()   Files.lines()
         * @throws IOException
         */
        @Test
        public void list() throws IOException {
    
            //获取该目录下的所有的文件
            Files.list(Paths.get("C:/test")).forEach(s->{
                System.out.println(s.getFileName());
                System.out.println(s);
            });
        }
    
        /**
         * 判断系统文件是否存在
         * @throws IOException
         */
        @Test
        public void exists() throws IOException {
            //其中第二个参数是如何确定该文件是否存在,LinkOption.NOFOLLOW_LINKS 说明不应该在文件系统中跟踪符号链接来判断是否文件存在
            System.out.println(Files.exists(Paths.get("C:/isExists"),new LinkOption[]{LinkOption.NOFOLLOW_LINKS} ));
        }
    
        /**
         * 复制文件
         * @throws IOException
         */
        @Test
        public void copy() throws IOException {
            //第一个参数是源文件  ,第二个参数目的文件,第三个参数是移动的方式取值有三个, COPY_ATTRIBUTES讲属性复制到新的文件,REPLACE_EXISTING如果目标文件存在就覆盖,ATOMIC_MOVE讲源文件一原子的操作进行移动到目标位置
            System.out.println(Files.copy(Paths.get("C:/test/aa/tt/新建 RTF 文档.rtf"),Paths.get("C:/test/aa/ff/新建 RTF 文档.rtf"), StandardCopyOption.COPY_ATTRIBUTES));
        }
    
        /**
         * 移动文件到指定的目录下
         * @throws IOException
         */
        @Test
        public void move() throws IOException {
            System.out.println(Files.move(Paths.get("C:/test/aa/tt/新建 DOC 文档.doc"),Paths.get("C:/test/aa/ff/新建 DOC 文档.doc"),StandardCopyOption.ATOMIC_MOVE));
        }
    
        /**
         *遍历制定路径下的所有文件夹和文件以及子文件夹和子文件
         * 四个方法:
         * preVisitDirectory  进入文件夹之前
         * visitFile   正在访问文件时、
         * visitFileFailed  文件访问失败时
         * postVisitDirectory  从文件下出来后
         * @throws IOException
         */
        @Test
        public void walkFileTree() throws IOException {
            Files.walkFileTree(Paths.get("C:/test"), new FileVisitor<Path>() {
                //
                @Override
                public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
                    if (Files.list(dir).count()<0){
                        return FileVisitResult.SKIP_SUBTREE;
                    }
                    System.out.println(dir);
                    return FileVisitResult.CONTINUE;
                }
    
                @Override
                public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                    System.out.println(file);
                    return FileVisitResult.CONTINUE;
                }
    
                @Override
                public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
                    System.out.println(file);
                    return FileVisitResult.CONTINUE;
                }
    
                @Override
                public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
                    System.out.println(dir);
                    return FileVisitResult.CONTINUE;
                }
            });
        }
    
    }
    
    
    
  • 相关阅读:
    HTML实现“摇一摇”效果,比较好的两篇文章;
    mongodb查询关于大于小于的用法;
    thenjs的应用
    js原生forEach、map与jquery的each、$.each的区别
    nodejs的url模块中的resolve()的用法总结
    2021.1.22 刷题(环形链表)
    2021.1.21 刷题(定义链表)
    2021.1.21 刷题(移除链表元素)
    2021.1.20 刷题(螺旋矩阵)
    滑动窗口-长度最小的子数组
  • 原文地址:https://www.cnblogs.com/java-hardly-road/p/11114878.html
Copyright © 2020-2023  润新知