内容参考了:
http://zjumty.iteye.com/blog/1896350
当做一个练习然后加上自己的想法吧:
集合在了java.nio.file下的一些类的使用
Path:
使用Paths这个工具类可以生成Path
代表地址 这个类主要处理一些地址的生成操作 比如在已有Path下得到子文件的地址 得到文件的相对地址等等,使用起来很简单,这边列几个方法(更多的可以参考链接里的地址):
package test.nio; import java.nio.file.Path; import java.nio.file.Paths; public class PathTest { public static void main(String[] args) { Path file=Paths.get("G:", "新建文件夹"); System.out.format("file:%s \n", file); //是否以所给的字符或者Path结尾(这边不写 新建文件夹 的会是false) System.out.println(file.endsWith("新建文件夹")); //在当前path下增加 输出:G:\新建文件夹\abc.txt Path file2=file.resolve("abc.txt"); System.out.format("file2:%s \n",file2); //在当前path所在的目录中增加 输出:G:\新建文件夹\1 Path file3=file2.resolveSibling("1"); System.out.format("file3:%s \n",file3); // 相对路径 输出:..\1 file3相对于file2的路径 Path file4=file2.relativize(file3); System.out.format("file4:%s \n",file4); // 获取名字数量 输出都为:2 System.out.format("file3 namecount:%d \n",file3.getNameCount()); System.out.format("file4 namecount:%d \n",file4.getNameCount()); // 输出新建文件夹 System.out.format("file3 getName(0):%s \n",file3.getName(0)); // 返回G:\ G:\新建文件夹\1 可见nameCount只记录 新建文件夹 和 1 G:\需要通过getRoot获取 System.out.format("file3 getRoot():%s \n",file3.getRoot()); // 相对路径没有root 返回null 并且 ..\1 他的namecount记录的就是 ..和1 System.out.format("file4 getRoot():%s \n",file4.getRoot()); } }
File Attriubute:
通过工具类Files获取
属性相关的类是 java.nio.file.attribute
BasicFileAttribute还有个BasicFileAttributeView
而这个View类里面只有三个方法:
其中一个还是返回那个BasicFileAttributes的....
似乎这个View类唯一的功能就是改下修改时间了....而其他View类也提供一些修改的操作
(这里有些讨论:http://stackoverflow.com/questions/16374278/basicfileattributes-vs-basicfileattributeview-in-java)
可以理解成BasicFileAttribute就是存放相关数据 而对应的view类不仅可以取出数据还可以对数据进行修改
package test.nio; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.BasicFileAttributeView; import java.nio.file.attribute.BasicFileAttributes; public class FileAttribute { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { Path file=Paths.get("G:", "新建文件夹","abc.txt"); BasicFileAttributeView bav=Files.getFileAttributeView(file, BasicFileAttributeView.class); BasicFileAttributes ba=bav.readAttributes(); //或者: //BasicFileAttributes ba=Files.readAttributes(file, BasicFileAttributes.class); System.out.format("File size: %s \n" , ba.size()); System.out.format("File creation time: %s \n" , ba.creationTime()); System.out.format("File was last accessed at: %s \n" , ba.lastAccessTime()); System.out.format("File was last modified at: %s \n" , ba.lastModifiedTime()); System.out.format("Is directory? %s \n" , ba.isDirectory()); System.out.format("Is regular file? %s \n" , ba.isRegularFile()); System.out.format("Is symbolic link? %s \n" , ba.isSymbolicLink()); System.out.format("Is other? %s \n" , ba.isOther()); } }
File creation time: 2013-07-24T08:36:50.93237Z
File was last accessed at: 2013-07-24T08:36:50.93237Z
File was last modified at: 2013-07-24T08:36:50.93237Z
Is directory? false
Is regular file? true
Is symbolic link? false
Is other? false
读取整个目录的文件:
用DirectoryStream这个类就可以完成
诸如:
DirectoryStream<Path> ds=Files.newDirectoryStream(file, "*")
的形式 其中第一个参数是Path ,第二个参数是String(还有其他的重载方法)
第二个参数可以是通配符 有很多种的书写方式(详细的可以看FileSystem的getPath() http://openjdk.java.net/projects/nio/javadoc/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String))
以上文档中有一个在win7下C:\\也可以写成C:/ 试验了下没问题
package test.nio; import java.io.IOException; import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class DirectoryStreamTest { public static void main(String[] args) throws IOException { Path file=Paths.get("G:/新建文件夹"); try(DirectoryStream<Path> ds=Files.newDirectoryStream(file, "*")){ for(Path p:ds){ System.out.format("file name :%s \n",p); } } } }
...先写到这..等等再写
--接着写点:
FileVisitor使用:
代码如下 使用了FileVistor并覆写了所有的方法
也可以使用SimpleFileVistor来选择需要的方法:
package test.nio; import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.FileVisitor; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.BasicFileAttributes; public class FileVistorTest { public static void main(String[] args) throws IOException { Path file=Paths.get("G:/","新建文件夹"); Files.walkFileTree(file, new FileVisitor<Path>(){ @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { System.out.format("visit file %s \n",file); return FileVisitResult.CONTINUE; } @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { System.out.format("preVisitDirectory %s \n",dir); return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { System.out.format("visitFileFailed %s \n",file); return FileVisitResult.CONTINUE; } @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { System.out.format("postVisitDirectory %s \n",dir); return FileVisitResult.CONTINUE; } }); } }
preVisitDirectory G:\新建文件夹\1
postVisitDirectory G:\新建文件夹\1
visit file G:\新建文件夹\abc.txt
visit file G:\新建文件夹\autorun.inf
preVisitDirectory G:\新建文件夹\cc
visit file G:\新建文件夹\cc\c01.txt
visit file G:\新建文件夹\cc\c02.txt
postVisitDirectory G:\新建文件夹\cc
visit file G:\新建文件夹\h.ico
postVisitDirectory G:\新建文件夹
根据方法名和输出很容易就可以知道是什么意思
需要注意的是:FileVisitResult 他是一个枚举类型 每个枚举值意思如下:
public enum FileVisitResult { /** * Continue. When returned from a {@link FileVisitor#preVisitDirectory * preVisitDirectory} method then the entries in the directory should also * be visited. * 在preVisitDirectory方法返回的话 目录下的文件(或目录)也会被被访问 */ CONTINUE, /** * Terminate. 结束 */ TERMINATE, /** * Continue without visiting the entries in this directory. This result * is only meaningful when returned from the {@link * FileVisitor#preVisitDirectory preVisitDirectory} method; otherwise * this result type is the same as returning {@link #CONTINUE}. * 只在preVistiDirectory这个方法中返回有意义 跳过目录下的文件 */ SKIP_SUBTREE, /** * Continue without visiting the <em>siblings</em> of this file or directory. * If returned from the {@link FileVisitor#preVisitDirectory * preVisitDirectory} method then the entries in the directory are also * skipped and the {@link FileVisitor#postVisitDirectory postVisitDirectory} * method is not invoked. * 跳过同一层目录的 如果在preVisitDirectory里使用 那么 postVisitDiretory这个方法就不会被触发 */ SKIP_SIBLINGS; }
Watch Service API
这个IBM-developer有个很好的示例 这边就不在多说了
相关推荐
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统的I/O模型的新技术。自Java 1.4版本引入NIO后,它为Java开发者提供了更高效的数据传输方式,尤其是在处理大量并发...
例如,书中提到了使用 Java NIO 可以提高应用程序的响应性、可扩展性和可靠性等。 ### Java NIO API 与旧版 I/O API 的关系 值得注意的是,Java NIO API 是对旧版 I/O API 的补充而非替代。这意味着开发者需要了解...
`Pro Java 7 NIO.2`这本书由Anghel Leonard著,深入探讨了Java NIO.2 API,这是Java 7引入的进一步扩展,包括: 1. **文件系统API增强**:新增了AsynchronousFileChannel,支持异步文件操作,可以在后台线程中执行...
java nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava nio.pdfjava ...
例如,你可以使用Glob语法(如`**/*.txt`)或正则表达式来查找特定类型的文件。 ### 总结 `java.nio.file`库的引入使得Java在文件操作方面有了质的飞跃,它简化了API,提高了性能,并提供了更多现代文件系统所需的...
### Java NIO 详细教程知识点解析 #### 一、Java NIO 概述 Java NIO(New IO)是Java平台提供的一种新的IO操作模式,它首次出现在Java 1.4版本中,并在后续版本中不断完善。Java NIO 的设计目的是为了克服传统Java ...
7. **java.nio.file.***(Java 7及以上):非阻塞I/O框架,包括`Path`、`Files`、`FileSystem`等,提供了更高效的文件操作。 8. **java.io.BufferedReader**和**java.io.BufferedWriter**:用于读写文本文件时的...
- `java.nio.file.Paths` 和 `Files` 类:提供文件操作的NIO接口,如读写文件、获取文件属性等。 5. **NIO在连接池中的应用** - **创建服务器端**:使用`AsynchronousServerSocketChannel`创建监听通道,接受...
Java NIO.pdf nio教程 Java NIO.pdf nio教程 java nio
Java NIO,全称为New Input/Output,是Java在1.4版本引入的一个新的I/O API,用于替代标准的Java IO API。这个新的API提供了一种不同于传统阻塞I/O模型的非阻塞I/O处理方式,使得在处理高并发、大数据传输场景时性能...
Java IO、NIO以及NIO.2是Java中用于处理输入/输出操作的三种主要机制。本书《Java IO, NIO and NIO.2》旨在深入浅出地介绍这些机制,同时书中内容均为英文。接下来将详细介绍这些知识点。 **Java IO** Java IO是...
JDK1.7 之 java.nio.file.Files 读取文件仅需一行代码实现 java.nio.file.Files 类是 JDK1.7 中引入的新的文件操作类,该类包含了许多有用的方法来操作文件。其中,Files.readAllBytes(Path) 方法可以将整个文件...
下面是一些关键的Java NIO使用示例: 1. **读取文件**:使用FileChannel从文件中读取数据到缓冲区,然后从缓冲区获取数据。 ```java FileInputStream fis = new FileInputStream("file.txt"); FileChannel channel ...
《Apress.Pro.Java.7.NIO.2.2011》这本书专注于讲解Java 7中的非阻塞I/O(Non-blocking I/O, NIO)和NIO 2的高级特性,是Java开发者深入理解这一关键领域的重要参考资料。NIO在Java平台中扮演着至关重要的角色,特别...
这个文件很可能是一个示例程序,演示了如何使用Java NIO进行高效的大文件复制。在传统的Java I/O中,我们通常使用InputStream和OutputStream进行文件复制,而这种方式需要不断读写,造成大量的上下文切换,效率较低...
Java NIO(New IO)是Java 1.4版本引入的一个新特性,它为Java应用程序提供了非阻塞I/O操作的能力,与传统的IO模型(基于流的I/O和基于缓冲区的I/O)相比,NIO具有更高的效率和灵活性。在Java NIO中,数据是以通道...
Java I/O, NIO, and NIO.2 is a power-packed book that accelerates your mastery of Java's various I/O APIs. In this book, you'll learn about classic I/O APIs (File, RandomAccessFile, the stream classes ...