Java操作文件
import java.io.File;
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
public class Test {
public static void main(String[] args){
WalkFileTreeTest.test();
}
}
/*
2.5 操作文件
2.5.1 Path
Paths.get()方法:
//一个一个部件的写
Path absolute = Paths.get("/home","harry"); :绝对路径/home/harry
Path relative = Paths.get("myprog","conf","user.prop"); :相对路径./mypoog/conf/user.prop
//传入一个包含多个部件的字符串
Path basePath = Paths.get("/opt/myprog/");
path.resolve()方法:
//接受一个Path对象
Path basePath = Paths.get("base");
Path workPath1 = basePath.resolve(new Path(work));
//接受一个字符串
Path workPath2 = basePath.resolve("work2");
path.resolveSibling()方法:
//从path路径的父路径产生temp路径(兄弟路径)
path.resolveSibling("temp");
path.relativize()方法:
//相对的处理(有道翻译)
p.relativize(r),我觉得可以简单的理解为,获得r相对于p的路径。
path.normalize()方法:
//移除所有冗余的.和..部件
/home/cay/../fred/./myprog => /home/fred/myporg
path.toAbsolutePath()方法:
//返回path的绝对路径。
Path将路径断开的各种方法:
Path p = Paths.get("/home","fred","myprog.prop");
Path parent = p.getParent(); //得到/home/fred
Path file = p.getFileName(); //得到最后文件的名称
Path root = p.getRoot(); //得到根路劲
如果需要和遗留系统的API交互,可以使用的是File类。Path接口有一个toFile方法,
而File类有一个toPath方法。
*/
/*
2.5.2 读写文件
byte[] bytes = Files.readAllBytes(path); //读取一个文件的全部内容
String content = new String(bytes,charset); //将文件当做字符串读入
List<String> lines = Files.readAllLines(path,charset) //希望将文件当做行序列读入
Files.write(path,content.getBytes(charset)); //希望写出一个字符串到文件中
Files.write(path,content.getBytes(charset)
,StandOpenOption.Append); //希望在指定的文件后追加内容
Files,write(path,lines) //将一个行的集合,写进文件里
得到相关的流:
InputStream in = Files.newInputStream(path);
OutputStream out = Files.newOutputStream(path);
Reader in = Files.newBufferedReader(path,charset);
Writer out = Files.newBufferedWriter(path,charset);
*/
/*
2.5.3 创建文件和目录
//创建一个空文件
Files.createFile(path)
//除路径最后一个部件外,其他部件都必须存在
Files.createDirectory(path);
//创建路径中的中间目录
Files.createDirectories(path);
用于在给定位置或系统指定位置创建零食文件或目录的方法:
Path newPath = Files.createTimeFile(dir,prefix,suffix);
Path newPath = Files.createTimeFile(prefix,suffix);
Path newPath = Files.createTimeFile(dir,prefix);
Path newPath = Files.createTimeFile(prefix);
*/
/*
2.5.4 复制、移动和删除文件
Files.copy(fromPath,toPath);
Files.copy(fromPath,toPath,
StandCopyOption.REPLACE_EXISTING, //替换已经存在的文件
StandCopyOption.COPY_ATTRIBUTES); //复制所有的文件属性
Files.move(fromPath,toPath);
Files.move(fromPath,toPath,
StandCopyOption.ATOMIC_MOVE); //将移动操作定义为原子性
Files.copy(inputStream,toPath); //将输入流复制到Path中
Files.copy(from,outputStream); //将path复制到输出流
Files.delete(path); //文件删除,会抛出异常
boolean deleted = Files.deleteIfExists(path); //不会抛出异常
*/
/*
StandardOpenOption
------------------------------------------------------------------------------------
| READ 用于文件读取而打开 |
| WRITE 用于文件写入而打开 |
| APPEND 如果用于文件写入而打开,在在文件末尾追加 |
| TRUNCATE_EXISTING 如果用于文件写入而打开,那么移除已有内容 |
| CREATE_NEW 创建新文件,文件存在的情况下会创建失败 |
| CREATE 自动在文件不存在的情况下创建新文件 |
| DELETE_ON_CLOSE 当文件被关闭时,尽可能的删除这个文件 |
| SPARSE 给文件系统一个提示,该文件时稀疏的 |
| DSYN|SYN 要求对文件数据|数据和元数据的每次更新都必须同步写入到存储设备中 |
------------------------------------------------------------------------------------
备注:StandardOpenOption 与 newBufferedWriter newInputStream newOutputStream
write一起使用
StandardCopyOption
------------------------------------------------------------------------------------
| ATOMIC_MOVE 原子性的移动文件 |
| COPY_ATTRIBUTES 复制文件的属性 |
| REPLACE_EXISTIONG 如果目标已存在,则替换它 |
------------------------------------------------------------------------------------
备注:StandardCopyOption 与 copy、move一起使用
LinkOption
------------------------------------------------------------------------------------
| NOFOLLOW_LINKS 不要跟踪符号连接 | |
------------------------------------------------------------------------------------
备注:LinkOption 与 exists isDeicretory isRegularFile一起使用
FileVisitOption
------------------------------------------------------------------------------------
| FLLOW_LINKS 跟踪符号连接 | |
------------------------------------------------------------------------------------
备注:FileVisitOption 与 fink walk walkFileTree一起使用
*/
/*
2.5.5 获取文件信息
检查某个属性的结果:
exists
isHidden
isReadable,isWritable,isExecutable
isRegularFile,isDirectory,isSymbolicLink
size方法将返回文件的字节数:
long fileSize = Files.size(path);
getOwner:
将文件的拥有者作为java.nio.file.attribute.UserPrincipal的一个
实例返回。
所有的文件系统都会报告一个基本属性集,它们被封装在BasicFileAttribute接口中
这部分信息与上述信息有部分重叠。基本文件属性包括:
1.创建文件、最后一次访问以及最后一次修改文件的时间,这些时间都被
表示为java.nio.file.attribute.FileTime
2.文件是常规文件、目录还是符号连接,或者都不是
3.文件尺寸
4.文件主键,这是某种类的对象,具体所属类与文件系统相关,有可能是
文件的唯一标识符,也可能不是。
=>
PosixFileAttribute attributes = Files.readAttributes(
path, BasicFileAttribute.class);
*/
/*
2.5.6 访问目录中的项
try(DirectoryStream<Path> entries = Files.newDirectoryStream(dir)){
for(Path entry : entries){
//Process entries
}
}
可以使用glob模式来过滤文件:
try(DirectoryStream<Path> entries = Files.newDirectoryStream(dir,"*.java"))
============================================================================================
= * = 匹配路径组成部分的0个或多个字符 = *.java匹配当前目录中的所有Java文件 =
= ** = 匹配跨目录边界的0个或多个字符 = **.java匹配在所有目录中的Java文件 =
= ? = 匹配一个字符 = ???.java 匹配所有三个字符的Java文件 =
= [] = 匹配一个字符集合 = Test[0-9A-F]匹配Testx.java,其中x是一个16进制数 =
= {} = 匹配由逗号分割开的多个选项之一 = *.{java,class}匹配所有的Java文件和class文件 =
= \ = 转义字符 = *\**匹配所有文件名中包含*的文件 =
============================================================================================
如果向要访问某个目录的所有子孙成员,可以转而调用walkFileTree方法,并向其传递一个FileVistor类型
的对象。这个对象会得到下列通知:
1.遇到一个文件或目录时:
FileVisitResult visitFile(T path, BasicFileAttribute)
2.在一个目录被处理前:
FileVisitResult preVisitDirectory(T dir, IOException ex)
3.在一个目录被处理后:
FileVisitResult postVisitDirectory(T dir, IOException ex)
4.在试图访问文件或目录时发生错误,例如没有权限打开目录:
FileVisitResult visitFileFailed(path, IOException ex)
对于上述的每种情况,都可以指定是否希望执行下面的操作:
1.继续访问下一个文件:
FileVisitResult.CONTINUE
2.继续访问,但是不再访问这个目录下的任何项了:
FileVisitResult.SKIP_SUBTREE
3.继续访问,但是不再访问这个文件的兄弟文件(和该文件同一目录下的文件)了:
FileVisitResult.SKIP_SIBLINGS
4.终止访问:
FileVisitResult.TERMINATE
*/
class WalkFileTreeTest{
public static void test(){
try{
Files.walkFileTree(Paths.get("."),new SimpleFileVisitor<Path>(){
public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes attrs)
throws IOException{
System.out.println(path);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
return FileVisitResult.SKIP_SUBTREE;
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
//用于删除目录树
public static void test2(){
try{
Files.walkFileTree(Paths.get("."),new SimpleFileVisitor<Path>(){
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
Files.delete(file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
if(exc!=null)
throw exc;
Files.delete(dir);
return FileVisitResult.CONTINUE;
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*
2.5.8 ZIP文件系统
Paths类会在默认的文件系统中查找路径,也可以让其在别的文件系统中查找。
FileSystem fs = FileSystems.newFileSystem(Paths.get(zipname),null);
Files.copy(fs.getPath(sourceName),targetPath);
FileSystem fs = FileSystems.newFileSystem(Paths.get(zipname),null)
Files.walkFileTree(fs.getPath("/",new SimpleFileVsitor<Path>(){
public FileVisitResult visitFile(Path file, BasicFileAttribute attrs)
throws IOException {
System.out.println(file);
return FileVisitResult.CONTINUE;
}});
*/
《Java核心技术卷二》笔记
Java操作文件的更多相关文章
- Java操作文件夹的工具类
Java操作文件夹的工具类 import java.io.File; public class DeleteDirectory { /** * 删除单个文件 * @param fileName 要删除 ...
- java操作文件的创建、删除、遍历
java操作文件的创建.删除.遍历: package test; import java.io.File; import java.io.IOException; import java.util.A ...
- java——操作文件
Java文件操作,共实现了文件复制(单个文件和多层目录文件),文件移动(单个文件和多层目录文件),文件删除(单个文件和多层目录文件),文件压缩 (单个文件),文件解压(单个文件),文件分割(将一个大文 ...
- Java操作文件Util
package io.guangsoft.utils; import java.io.File; import java.io.FileInputStream; import java.io.File ...
- java操作文件常用的 IO流对象
1.描述:流是字节数据或字符数据序列.Java采用输入流对象和输出流对象来支持程序对数据的输入和输出.输入流对象提供了数据从源点流向程序的管道,程序可以从输入流对象读取数据:输出流对象提供了数据从程序 ...
- Java操作文件那点事
刚开始学Java时候,一直搞不懂Java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己结合API来整理一下,有错的话请指正,也希 ...
- Java操作文件转码
package downloadTest; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.F ...
- java操作文件流对象
所有流对象 InputStream 字节流 FileInputStream 字节流 专门读写非文本文件的 BufferedInputStream 高效流 OutPutS ...
- Java删除文件夹和文件
转载自:http://blog.163.com/wu_huiqiang@126/blog/static/3718162320091022103144516/ 以前在javaeye看到过关于Java操作 ...
随机推荐
- Win10《芒果TV》商店版更新v3.2.3:新增应用内意见反馈、播放重试、透明磁贴
在2016圣诞节临近之际,<芒果TV>UWP版迅速更新v3.2.3版,主要是新增应用内意见反馈提交功能.播放重试.透明磁贴.动态磁贴等功能,进一步优化稳定性.视觉细节.运行速度. 芒果TV ...
- List.Sort() 小小技巧--- 从大到小排列
List.sort() 默认的情况下是从小到大的排列. 例如: List<int> list = new List<int>(); list.Add(- ...
- 解决C/C++程序执行一闪而过的方法(使用getchar,或者cin.get,不推荐system(“pause”))
简述 在VS编写控制台程序的时候,包括使用其他IDE(Visual C++)编写C/C++程序,经常会看到程序的执行结果一闪而过,要解决这个问题,可以在代码的最后加上system(“pause”).g ...
- Oracle高级查询、事物、过程及函数
一.SQL函数 1.分类:单行函数(日期.数值.转换.字符等),多行函数,也称为分组函数(max.min.avg.sum.row_number.rank等). 2.数值函数 abs(n):求数字n的绝 ...
- Zabbix监控ActiveMQ
当我们在线上使用了ActiveMQ 后,我们需要对一些参数进行监控,比如 消息是否有阻塞,哪个消息队列阻塞了,总的消息数是多少等等.下面我们就通过 Zabbix 结合 Python 脚本来实现对 Ac ...
- 《SpringMVC从入门到放肆》十五、SpringMVC之上传文件
上一篇我们学习了数据分组校验,已经可以灵活的在项目中进行数据校验了,今天来学习SpringMVC的上传文件功能.相对来说SpringMVC的上传功能,还是比较简单的. 一.添加依赖 <depen ...
- C++按格式接收输入字符(京东,滴滴,360笔试必用)
头一次起这种标题,为了对得起这个标题,我尽量多写点~ 最近还是一边实习一遍投简历--笔试--面试,然而发现了自己的好多问题. 在答了京东笔试(滴滴,360也是这样的)的题后,发现与腾讯,阿里等公司的不 ...
- 10 关于DOM的操作
一.JavaScript的组成 JavaScript基础分为三个部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数.if语句.for语句等. DOM:文档对象 ...
- SpringBoot(17)---SpringBoot整合RocketMQ
SpringBoot整合RocketMQ 上篇博客讲解了服务器集群部署RocketMQ 博客地址:RocketMQ(2)---Docker部署RocketMQ集群 这篇在上篇搭建好的基础上,将Spri ...
- docker search/pull 报错
docker报错 Get https://registry-1.docker.io/v2/: x509: certificate has expired or is not yet valid 这种错 ...