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);
}
});

J2SE 8的输入输出--Path/Paths File/Files; FileSystems 类的用法的更多相关文章

  1. Java NIO学习(Path接口、Paths和Files工具类的使用)

    NIO学习:Paths和Files工具类的使用 JDK1.7引入了新的IO操作类.在java.nio.file包下,Java NIO Path接口和Files类. Path接口:Path表示的是一个目 ...

  2. Path;Paths和Files;FileVisitor

    package filet; import java.io.FileOutputStream; import java.nio.file.FileStore; import java.nio.file ...

  3. NIO.2中Path,Paths,Files类的使用

    Java NIO Java NIO概述 Java NIO(New IO(新io),Non-Blocking IO(非阻塞的io))是从Java 1.4版本开始引入的一套新的IO API,可以替代标准的 ...

  4. JAVA基础知识之NIO.2——Path,Paths,Files

    NIO.2 JDK7对NIO进行了重大改进,主要包含以下两方面 新增Path接口,Paths工具类,Files工具类. 这些接口和工具类对NIO中的功能进行了高度封装,大大简化了文件系统的IO编程. ...

  5. Java文件IO操作应该抛弃File拥抱Paths和Files

    Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream;import java.nio.file.FileSystem; ...

  6. JAVA NIO学习四:Path&Paths&Files 学习

    今天我们将学习NIO 的最后一章,前面大部分涉及IO 和 NIO 的知识都已经讲过了,那么本章将要讲解的是关于Path 以及Paths 和 Files 相关的知识点,以对前面知识点的补充,好了言归正传 ...

  7. Java的Path、Paths和Files

    前言 因为这几天被java.nio的这几个接口和工具类卡到了,就顺便地查了一波文档以及使用方法,这篇其实更像是API的复制粘贴,只不过我在注释里多写了一些output和注意事项,看不惯API的可以选择 ...

  8. java IO流 (九) Path、Paths、Files的使用

    1.NIO的使用说明:>Java NIO (New IO,Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API,可以替代标准的Java IO AP.>NI ...

  9. Java NIO Path接口和Files类配合操作文件

    Java NIO Path接口和Files类配合操作文件 @author ixenos Path接口 1.Path表示的是一个目录名序列,其后还可以跟着一个文件名,路径中第一个部件是根部件时就是绝对路 ...

随机推荐

  1. dbt 基本试用

    dbt 是一个很不错的进行etl 中的t 处理的工具,灵活简单,我们需要写的就是select 语句 dbt 帮助我们进行处理 测试集成了graphql 以及使用docker 运行 安装 pip ins ...

  2. JUC集合之 ConcurrentLinkedQueue

    ConcurrentLinkedQueue介绍 ConcurrentLinkedQueue是线程安全的队列,它适用于"高并发"的场景. 它是一个基于链接节点的无界线程安全队列,按照 ...

  3. webpack的3个路径配置项: assetsRoot、assetsSubDirectory、assetsPublicPath

    在 vue-cli 构建模版的配置文件config.js中有assetsRoot,assetsSubDirectory和assetsPublicPath这三个路径配置项 assetsRoot:构建输出 ...

  4. nginx信号量

    nginx信号说明相关说明 信号名称 作用 TERM,INT 快速关闭 QUIT 从容关闭 HUP 重新加载配置,用新的配置开始新的工作进程,从容关闭旧的工作进程 USR1 重新打开日志文件 USR2 ...

  5. .gitignore 存放位置

    放在仓库根目录下即可.比如你的仓库在“D:\MYREPO”,位置就是“D:\MYREPO\.gitignore”. 模板可从GITHUB上COPY一份.

  6. thinkphp.2 thinkphp5微信支付 微信公众号支付 thinkphp 微信扫码支付 thinkphp 微信企业付款5

    前面已经跑通了微信支付的流程,接下来吧微信支付和微信企业付款接入到thinkphp中,版本是3.2 把微信支付类.企业付款类整合到一起放到第三方类库,这里我把微信支付帮助类和企业付款类放到同一个文件了 ...

  7. Nginx+tomcat+redis实现session共享

    Nginx+tomcat+redis实现session共享 1,安装nginx,使用yum -y install nginx 这是epel源中的,需要安装epel源. 2,配置nginx. 在ngin ...

  8. Eclipse/MyEclipse连接Hadoop集群出现:Unable to ... ... org.apache.hadoop.security.AccessControlExceptiom:Permission denied问题

    问题详细如下: 解决办法: <property> <name>dfs.premissions</name> <value>false</value ...

  9. ThinkJava-多态

    8.2.1 方法调用绑定 解决的办法就是后期绑定,它的含义就是在运行时根据对象的类型进行绑定.后期绑定也 叫做动态绑定或运行时绑定.如果一种语言想实现后期绑定,就必须具有某种机制,以便在运 行时能判断 ...

  10. 修改phpMYadmin 链接其他数据库地址的方法

    找到phpmyadmin的文件 修改 config.inc.php 文件 框红的地方修改成你需要链接的数据库信息 重启环境,再次访问 phpmyadmin 地址即可