zoukankan      html  css  js  c++  java
  • J2SE 8的输入输出--Path/Paths File/Files; FileSystems 类的用法

    Path的简单用法

    //1. Path 正常用法
    Path path = Paths.get("src/main/resource/zip");
    logger.debug(path.toRealPath());
    logger.debug(path.toAbsolutePath());
    logger.debug(path.getFileName());
    logger.debug(path.getParent());
    logger.debug(path.getNameCount());
    logger.debug(path.getRoot());
    
    path = FileSystems.getDefault().getPath("src/main/resource/zip");
    logger.debug(path.toRealPath());
    logger.debug(path.toAbsolutePath());
    logger.debug(path.getFileName());
    logger.debug(path.getParent());
    logger.debug(path.getNameCount());
    logger.debug(path.getRoot());
    
    
    //2. Path get(String first, String... more)	用默认的文件系统路径分隔符连接元素
    Path path2 = Paths.get("src/main", "resource/zip");
    logger.debug(path2.toRealPath());
    logger.debug(path2.toAbsolutePath());
    logger.debug(path2.getFileName());
    logger.debug(path2.getParent());
    logger.debug(path2.getNameCount());
    logger.debug(path2.getRoot());
    
    
    //3. resolve(other)
    //(1) other 不是绝对路径, 连接this父路径和other
    Path mainPath = Paths.get("/main/");
    Path completePath = mainPath.resolve("/zip/Json.rar");
    logger.debug(completePath.toAbsolutePath());
    
    //(2) other 是绝对路径, 使用other
    completePath = mainPath.resolve("D:/AbsolutePath/zip/Json.rar");
    logger.debug(completePath.toAbsolutePath());
    
    
    //4. resolveSibling(other)	得到兄弟路径
    //(1) other 不是绝对路径, 连接this父路径和other
    mainPath = Paths.get("/main/");
    completePath = mainPath.resolveSibling("/zip");
    logger.debug(completePath.toAbsolutePath());
    
    //(2) other 是绝对路径, 使用other
    completePath = mainPath.resolveSibling("D:/AbsolutePath/zip/Json.rar");
    logger.debug(completePath.toAbsolutePath());
    
    
    //5. relativize()	对this解析, 得到相对于other的 相对路径
    mainPath = Paths.get("/main/");
    Path relativize = mainPath.relativize(Paths.get("/main/AA/BB/CC"));
    logger.debug(relativize);
    
    
    //6. normalize()	移除冗余的..和.
    Path normalize = Paths.get("/home/cay/../fred/./myprog").normalize();
    logger.debug(normalize);
    
    
    //7. path to file
    System.out.println(mainPath.toFile());
    
    
    //8. file to path
    System.out.println(mainPath.toFile().toPath());

    Paths辅助类用法


    File的简单用法

    // 创建文件:
    boolean result = new File("textFile.txt").createNewFile();
    
    // 文件重命名:
    result = new File("textFile.txt").renameTo(new File("newTextFile.txt"));
    
    // 删除文件:
    new File("somefile.txt").delete();
    
    // 改变文件属性:
    File f = new File("somefile.txt");
    f.setReadOnly(); // making the file read only
    f.setLastModified(new Date().getTime());
    
    // 获取文件大小:
    long length = new File("somefile.txt").length();
    
    // 判断文件是否存在:
    boolean status = new File("somefile.txt").exists();
    
    // 移动文件:
    boolean success = new File("somefile.txt").renameTo(new File(new File("directoryName"), "new Name"));
    
    // 获取绝对路径:
    File absPath = new File("somefile.txt").getAbsoluteFile();
    
    // 判断是文件还是目录:
    boolean isDirectory = new File("somefile.txt").isDirectory();
    System.out.println(isDirectory); // false
    
    // 列举目录下文件:
    String[] fileResult = new File("users/ege").list();
    
    // 创建目录:
    boolean mkdirResult = new File("users/ege").mkdir();
    
    
    //过滤文件
    File file = new File("E:\core");
    String[] list = file.list(new FilenameFilter() {
    	@Override
    	public boolean accept(File dir, String name) {
    		return name.endsWith(".pdf");
    	}
    });
    
    for (String pdfFile : list) {
    	System.out.println(pdfFile);
    }
    
    
    //文件监视器
    watchService("E:\test");
    
    
    //异步通信
    //Asynchronous


    Files辅助类用法

    //1. 读写文件
    //(1) Files.readAllBytes()
    String string = new String(Files.readAllBytes(Paths.get("E:\111.txt")), StandardCharsets.UTF_8);
    System.out.println(string);
    System.out.println();
    
    //(2) Files.readAllLines()
    List<String> strings = Files.readAllLines(Paths.get("E:\111.txt"), StandardCharsets.UTF_8);
    System.out.println(strings);
    System.out.println();
    
    //(3) Files.write()
    //向文件覆写内容
    Files.write(Paths.get("E:\111.txt"), "File Write Test1".getBytes(StandardCharsets.UTF_8));
    
    //向文件追加内容
    Files.write(Paths.get("E:\111.txt"), "File Write Test2".getBytes(StandardCharsets.UTF_8), StandardOpenOption.APPEND);
    
    //从另一个文件中拷贝文件(处理的文件比较大, 需要用Buffered等)	//java.nio.charset.MalformedInputException: Input length = 1==>GBK
    Files.write(Paths.get("E:\111.txt"), Files.readAllLines(Paths.get("E:\java.txt"), Charset.forName("GBK")), StandardOpenOption.APPEND);
    
    //(4) Files.newInputStream()
    try(InputStream newInputStream = Files.newInputStream(Paths.get("E:\111.txt"));){
    	byte[] b = new byte[1024];
    	int hasRead = 0;
    	while ((hasRead = newInputStream.read(b)) > 0) {
    		System.out.print(new String(b, 0, hasRead));
    	}
    }
    
    //(5) Files.newOutputStream()
    try(OutputStream newOutputStream = Files.newOutputStream(Paths.get("E:\111.txt"));){
    	newOutputStream.write("第一期面授培训大纲.pdf".getBytes());
    	newOutputStream.write("2017.07体检报告.pdf".getBytes());
    	newOutputStream.write("csdn下载文档".getBytes());
    }
    
    //(6) Files.newBufferedReader()
    try(BufferedReader newBufferedReader = Files.newBufferedReader(Paths.get("E:\111.txt"));){
    	newBufferedReader.lines().forEach(n->System.out.println(n));
    }
    
    //(7) Files.newBufferedWriter()
    try(BufferedWriter newBufferedWriter = Files.newBufferedWriter(Paths.get("E:\111.txt"));){
    	newBufferedWriter.write("时寒冰说:未来二十年,经济大趋势(未来篇) - 时寒冰");
    	newBufferedWriter.write("时寒冰说:未来二十年,经济大趋势(现实篇)");
    }
    
    
    
    //2. 创建文件
    //(1) 创建目录及文件
    Path pathA = Paths.get("E:\FilesTest\A\111.txt");
    if(Files.notExists(pathA)){
    	Files.createDirectories(pathA.getParent());		//创建中间目录
    	
    	//windows下不支持PosixFilePermission来指定rwx权限。
    //			Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rw-rw-rw-");
    //			FileAttribute<Set<PosixFilePermission>> attrs = PosixFilePermissions.asFileAttribute(perms);
    	
    	Files.createFile(Paths.get("E:\FilesTest\A\111.txt"));
    }
    System.out.println();
    
    //(2) 创建临时文件
    //建立临时目录
    Path tempDirectory = Files.createTempDirectory("temp");
    System.out.println(tempDirectory.toAbsolutePath());
    Files.deleteIfExists(tempDirectory);
    System.out.println();
    
    //建立临时文件
    Path createTempFile = Files.createTempFile("temp", ".txt");
    System.out.println(createTempFile.toAbsolutePath());
    Files.deleteIfExists(createTempFile);
    System.out.println();
    
    
    
    //3. 复制文件
    Files.copy(Paths.get("E:\111.txt"), pathA, StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES);
    
    Files.copy(pathA, System.out);
    System.out.println();
    
    //		Path tempPath = Paths.get("E:\temp.txt");
    //		Files.copy(System.in, tempPath);
    //		Files.copy(tempPath, System.out);
    
    
    //4. 移动文件
    Path pathB = Paths.get("E:\FilesTest\B\222.txt");
    Files.createDirectories(pathB.getParent());
    Files.move(pathA, pathB, StandardCopyOption.ATOMIC_MOVE);
    
    
    //5. 文件属性	
    //(1) Files
    Path path = Paths.get("E:\java.txt");
    System.out.println(Files.size(path));
    System.out.println(Files.isHidden(path));
    System.out.println(Files.isReadable(path));
    System.out.println(Files.isWritable(path));
    System.out.println(Files.isExecutable(path));
    System.out.println(Files.isRegularFile(path));
    System.out.println(Files.isDirectory(path));
    System.out.println(Files.isSymbolicLink(path));
    System.out.println(Files.isSameFile(path, path));
    System.out.println();
    
    
    //Reset Attributes
    //		PosixFileAttributes readAttributes = Files.readAttributes(source, PosixFileAttributes.class);
    //		Set<PosixFilePermission> permissions = readAttributes.permissions();
    //		permissions.clear();
    //		
    //		String owner = readAttributes.owner().getName();
    //		String perms = PosixFilePermissions.toString(permissions);
    //		permissions.add(PosixFilePermission.OWNER_READ);
    //		permissions.add(PosixFilePermission.GROUP_READ);
    //		permissions.add(PosixFilePermission.OTHERS_READ);
    //		permissions.add(PosixFilePermission.OWNER_READ);
    //		
    //		Files.setPosixFilePermissions(source, permissions);
    
    
    //(2) BasicFileAttributes
    BasicFileAttributes fileAttributes = Files.readAttributes(path, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS);
    System.out.println(fileAttributes.creationTime());
    System.out.println(fileAttributes.lastAccessTime());
    System.out.println(fileAttributes.lastModifiedTime());
    System.out.println(fileAttributes.isRegularFile());
    System.out.println(fileAttributes.isDirectory());
    System.out.println(fileAttributes.isSymbolicLink());
    System.out.println(fileAttributes.size());
    System.out.println(fileAttributes.fileKey());
    System.out.println();
    
    
    //6. 删除文件
    //		Files.deleteIfExists(pathA);
    //		Files.deleteIfExists(pathB);
    
    
    
    //7. 访问目录中的项
    //(1) Files.list()		注意不是Files.lines()		注意list()方法不处理子目录
    Path listPath = Paths.get("E:\core");
    Stream<Path> entries = Files.list(listPath);
    entries.forEach(n->System.out.println(n.toAbsolutePath()));
    System.out.println();
    
    
    //(2) Files.walk()		walk()可以处理子目录, 也可以设置最大访问深度
    Stream<Path> walkEntries = Files.walk(listPath, FileVisitOption.FOLLOW_LINKS);
    walkEntries.forEach(n->System.out.println(n.toAbsolutePath()));
    System.out.println();
    
    
    
    //8. 过滤文件
    //(1) Files.newDirectoryStream()  	the glob pattern
    DirectoryStream<Path> newDirectoryStream = Files.newDirectoryStream(listPath, "*.doc");
    newDirectoryStream.forEach(n->System.out.println(n.toAbsolutePath()));
    System.out.println();
    
    
    //(2) Files.walkFileTree()
    Files.walkFileTree(listPath, new FindDocisitor());
    System.out.println();
    
    
    //(3) 利用FileVisitor接口, 在删除所有文件后, 移除对应目录
    Files.walkFileTree(Paths.get("E:\FilesTest"), new SimpleFileVisitor<Path>(){
    	public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
    		Files.delete(file);
    		return FileVisitResult.CONTINUE;
    	};
    	
    	public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
    		if(null!=exc){
    			throw exc;
    		}
    		
    		Files.delete(dir);
    		return FileVisitResult.CONTINUE;
    	};
    });
    
    
    
    
    
    //9. 


    FileSystems 辅助类用法


    处理Zip文件

    //1. 建立文件系统
    FileSystem fileSystem = FileSystems.newFileSystem(Paths.get("E:\core.zip"), null);
    
    //2. 从zip文件中复制出任意文件
    Files.copy(fileSystem.getPath("/111.txt"), Paths.get("E:\888.txt"));
    
    //3. 遍历zip文件系统
    Files.walkFileTree(fileSystem.getPath("/"), new SimpleFileVisitor<Path>(){
    	@Override
    	public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
    		System.out.println(file.toAbsolutePath());
    		return super.visitFile(file, attrs);
    	}
    });






  • 相关阅读:
    工具网页地址
    invalid comparison: java.util.ArrayList and java.lang.String——bug解决办法
    打印csdn博客文章内容
    git 更新远程分支列表
    idea 配置 SpringBoot 热启动详解,和热启动失效解决方案
    MacOS下安装RabbitMQ
    Spring Boot Admin
    Navicat Premium Mac 12 破解
    sql查询不重复数据
    org.apache.commons.lang3 jar的使用 ArrayUtils
  • 原文地址:https://www.cnblogs.com/xiang--liu/p/9710382.html
Copyright © 2011-2022 走看看