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操作 ...
随机推荐
- Windows Phone 8.1之应用设置存储的简单应用
应用设置存储主要分为本地存储和漫游存储两种方式.本地存储的指将应用的设置信息存储在本地存储空间中,而漫游存储则是指将应用的设置信息存储在网络服务器中.相对于本地存储而言,漫游存储支持多台设备之间的应用 ...
- 破处在window7桌面版本下golang连接数上限
注册表 HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 修改或者添加 MaxUserPort 60000 TcpTimedWaitDel ...
- QuickReport根据每行的内容长度动态调整DetailBand1的行高
procedure TPosPubFactureRep.DetailBand1BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); v ...
- tensorflow 1.0 学习:模型的保存与恢复
将训练好的模型参数保存起来,以便以后进行验证或测试,这是我们经常要做的事情.tf里面提供模型保存的是tf.train.Saver()模块. 模型保存,先要创建一个Saver对象:如 saver=tf. ...
- 【JDK源码分析】String的存储区与不可变 专题
<Think in Java>中说:“关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系”. "=="判断的是两个对象的内存地址是否一样,适用于 ...
- 《HTML开发Mac OS App 视频教程》 第001讲、入门教程
土豆网同步更新:http://www.tudou.com/plcover/VHNh6ZopQ4E/ 使用HTML 创建Mac OS App 视频教程. 官方QQ群: (1)App实践出真知 434 ...
- BI-学习之 新概念介绍
什么是统一维度模型 层次结构.级别.成员和度量值 什么是MDX MDX与SQL的区别 什么是数据仓库 什么是OLAP数据分析引擎 BI企业级解决方案 什么是统一维度模型 维度(dimension)是描 ...
- windows下进程间通信的(13种方法)
转自:http://blog.csdn.NET/shiqz/article/details/5862936 摘 要 随着人们对应用程序的要求越来越高,单进程应用在许多场合已不能满足人们的要求.编写多进 ...
- 国人Web前端开发必备干货,一个完美支持IE6在内所有浏览器的CSS框架
摘要: 企户动CSS框架是一个能够完美支持IE6~7在内的所有浏览器的 HTML&CSS 前端框架!给Web开发提供了自适应宽度的百分比多列网格,以及已语义化和结构化的标题.段落.列表.表格. ...
- Oracle11超详细安装教程和配置
这篇博客主要是介绍一下Oracle数据的安装过程和简单的配置,帮助大家可以简单的让Oracle运行起来,只是一个基础的教程. 准备工作: 如果你以前装过Oracle数据库,而且安装目录要改变请先打开注 ...