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操作 ...
随机推荐
- wpf自定义带刻度的柱状图控件
效果图: 主要代码xaml: <UserControl x:Class="INSControls._01Conning.Steer.ConningSpeedBar" xmln ...
- vfp9写的爬虫前段,基于webbrowser
*基于xmlhttp不能正确获取js动态加载的数据 CLEAR ALL CLEAR PUBLIC zform zform = CREATEOBJECT([myform])zform.go(" ...
- c#实现golang 的channel
使用.NET的 BlockingCollection<T>来包装一个ConcurrentQueue<T>来实现golang的channel. 代码如下: public clas ...
- Qt技术优势
1. Qt这个C++的图形库由Trolltech在1994年左右开发.它可以运行在Windows,Mac OS X, Unix,还有像Sharp Zaurus这类嵌入式系统中.Qt是完全面向对象的. ...
- c# Lambda扩展
扩展类 public static class LinqExtensions { /// <summary> /// 创建lambda表达式:p=>true /// </sum ...
- 配置QSslConfiguration让客户端程序跳过本地SSL验证
大家下午好哦.今天我们在重新制作我们萌梦聊天室的时候,出现了这样的问题.那就是我们的客户端能够对qtdream.com服务器进行登录,但是不能对localhost服务器(也就是本机啦)进行登录.这究竟 ...
- DUI-Windows消息机制要点(34篇)
[隐藏] 1窗口过程概念 2消息类型 2.1系统定义消息 2.1.1窗口消息 2.1.2命令消息 2.1.3控件通知消息 2.1.4程序定义消息 3消息队列 3.1系统消息队列 3.2线程消息队列 4 ...
- 远程控制卡配置和RAID基本知识
一.远程控制卡配置(戴尔R710)ctrl+eLAN Parameters ==>>远程连接IP地址配置LAN User Configuration ==>>远程连接账号密码配 ...
- JVM检测&工具
前几篇篇文章介绍了介绍了JVM的参数设置并给出了一些生产环境的JVM参数配置参考方案.正如之前文章中提到的JVM参数的设置需要根据应用的特性来进行设置,每个参数的设置都需要对JVM进行长时间的监测,并 ...
- CentOS7.5上FTP服务的安装与使用
1.FTP简介 1.1FTP:File Transfer Protocol 文件传输协议 FTP是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式.它属于网络传输协议的应用层.文件传送(f ...