NIO Files工具对文件操作
2018-08-13 15:09:32
863次阅读
0个评论
Files工具类——文件操作
Files工具类负责文件的各种操作:
1. 文件内容的读写操作
Files工具类负责文件的各种操作:
1. 文件内容的读写操作
使用这些方法我们可以直接获取文件的IO流对象(传统IO)或文件管道(NIO),这很大程度方便了我们的编程。
// 创建文件输入流
public static InputStream newInputStream(Path path, OpenOption... options) throws IOException
{
return provider(path).newInputStream(path, options);
}
// 创建文件输出流
public static OutputStream newOutputStream(Path path, OpenOption... options) throws IOException
{
return provider(path).newOutputStream(path, options);
}
// 创建字节管道(FileChannel)
public static SeekableByteChannel newByteChannel(Path path, Set<? extends OpenOption> options, FileAttribute<?>... attrs) throws IOException
{
return provider(path).newByteChannel(path, options, attrs);
}
public static SeekableByteChannel newByteChannel(Path path, OpenOption... options) throws IOException
{
Set<OpenOption> set = new HashSet<OpenOption>(options.length);
Collections.addAll(set, options);
return newByteChannel(path, set);
}
2. 拷贝和移动
// 将源文件拷贝到指定路径
public static Path copy(Path source, Path target, CopyOption... options);
// 将源文件移动到指定路径
public static Path move(Path source, Path target, CopyOption... options);
OpenOption与CopyOption
OpenOption:用于配置如何打开或创建一个文件
CopyOption:用于配置如何拷贝或移动一个文件
LinkOption:定义如何处理符号链接
3. 列举目录下的文件
// 非递归迭代目录下的文件(一层)
public static DirectoryStream<Path> newDirectoryStream(Path dir);
// glob:可使用通配符,如:*,?等。
public static DirectoryStream<Path> newDirectoryStream(Path dir, String glob);
// filter:过滤器
public static DirectoryStream<Path> newDirectoryStream(Path dir, DirectoryStream.Filter<? super Path> filter);
示例:
public static void main(String[] args) {
Path path = Paths.get("C:/");
try {
DirectoryStream<Path> ds;
ds = Files.newDirectoryStream(path); // 默认
for (Path p : ds) {
System.out.println(p);
}
System.out.println("-------------------");
ds = Files.newDirectoryStream(path, "*Win*"); // 通配符
for (Path p : ds) {
System.out.println(p);
}
} catch (IOException e) {
e.printStackTrace();
}
}
运行结果:
C:\$GetCurrent
C:\$Recycle.Bin
C:\$WINRE_BACKUP_PARTITION.MARKER
C:\AVScanner.ini
C:\Boot
C:\bootmgr
C:\BOOTNXT
C:\BOOTSECT.BAK
C:\Documents and Settings
C:\hiberfil.sys
C:\inetpub
C:\Intel
C:\pagefile.sys
C:\Program Files
C:\Program Files (x86)
C:\ProgramData
C:\Recovery
C:\swapfile.sys
C:\System Volume Information
C:\Users
C:\Windows
C:\Windows10Upgrade
-------------------
C:\$WINRE_BACKUP_PARTITION.MARKER
C:\Windows
C:\Windows10Upgrade
4. 创建与删除
// 创建文件,并指定相应的文件属性
public static Path createFile(Path path, FileAttribute<?>... attrs);
// 创建目录(父目录不存在会抛出异常)
public static Path createDirectory(Path dir, FileAttribute<?>... attrs);
// 创建多级目录(父目录不存在会创建父目录)
public static Path createDirectories(Path dir, FileAttribute<?>... attrs);
// 创建临时文件
// dir指定目录;
// prefix指定前缀,可以为空;
// suffix指定后缀,可以为空,默认为.tmp
public static Path createTempFile(Path dir, String prefix, String suffix, FileAttribute<?>... attrs);
public static Path createTempFile(String prefix, String suffix, FileAttribute<?>... attrs);
// 创建临时目录
public static Path createTempDirectory(Path dir, String prefix, FileAttribute<?>... attrs);
public static Path createTempDirectory(String prefix, FileAttribute<?>... attrs)
// 创建一个符号链接,如果JVM权限不够可能会抛出异常
public static Path createSymbolicLink(Path link, Path target, FileAttribute<?>... attrs);
// 创建一个硬链接,如果JVM权限不够可能会抛出异常
public static Path createLink(Path link, Path existing);
// 删除文件或目录,如果目录不为空会抛出异常
public static void delete(Path path);
// 如果文件存在就删除
public static boolean deleteIfExists(Path path);
5. 其他
// 读取符号链接指向的路径
public static Path readSymbolicLink(Path link);
// 获取该路径的FileStore对象
public static FileStore getFileStore(Path path);
// 判断两个路径是否指向同一个文件
public static boolean isSameFile(Path path, Path path2);
// 该路径所指向的文件是否为隐藏文件
public static boolean isHidden(Path path);
// 判断文件类型,无法判断则返回null
public static String probeContentType(Path path);
FileStore示例:
public static void main(String[] args) {
Path path = Paths.get("C:/");
try {
FileStore fs = Files.getFileStore(path);
System.out.println("TotalSpace: " + fs.getTotalSpace());
System.out.println("UnallocatedSpace: " + fs.getUnallocatedSpace());
System.out.println("UsableSpace: " + fs.getUsableSpace());
System.out.println("Name: " + fs.name());
System.out.println("Type: " + fs.type());
System.out.println("ReadOnly: " + fs.isReadOnly());
} catch (IOException e) {
e.printStackTrace();
}
}
运行结果:
TotalSpace: 117369143296
UnallocatedSpace: 49184604160
UsableSpace: 49184604160
Name: 操作系统
Type: NTFS
ReadOnly: false
ContentType示例:
public static void main(String[] args) {
Path path = Paths.get("D:/sort.txt");
try {
// 对于大部分文件该方法还是无法判断文件内容类型
System.out.println(Files.probeContentType(path));
} catch (IOException e) {
e.printStackTrace();
}
}
运行结果:
text/plain
6. 属性访问
tic Path setOwner(Path path, UserPrincipal owner);
/**该文件是否为符号链接文件**/
public static boolean isSymbolicLink(Path path);
/**该文件是否为目录文件**/
public static boolean isDirectory(Path path, LinkOption... options);
/**是否为常规文件**/
public static boolean isRegularFile(Path path, LinkOption... options);
/**查看文件上次修改的时间**/
public static FileTime getLastMo
7. 可访问性
/**文件是否存在**/
public static boolean exists(Path path, LinkOption... options);
/**文件是否不存在**/
public static boolean notExists(Path path, LinkOption... options);
/**文件是否可读**/
public static boolean isReadable(Path path);
/**文件是否可写**/
public static boolean isWritable(Path path);
/**文件是否可执行**/
public static boolean isExecutable(Path path);
00
相关话题
- NIO Paths工具对文件操作
- FastDFS分布式文件系统封装JAVA client工具类
- lucene (Too many open files)错误
- fabric.js操作教程
- ElasticSearch 6.0 Bulk批量操作
- Spring 自带工具类
- 反射工具包ReflectASM使用
- 文件流式上传
- SpringMVC流式上传文件
- Nginx支持字体文件
- Spring MVC 文件下载
- Javacsv读写csv文件
- Fabric.js实作 Node.js 上传图片及操作 Fabricjs 为图片加上浮水印
- SpringBoot自定义配置文件及读取配置文件
- SpringMVC使用StandardServletMultipartResolver上传文件