I/O流、文件操作
1)操作文件
Path和Files是在JavaSE7中新添加进来的类,它们封装了在用户机器上处理文件系统所需的所有功能。Path表示的一个目录名序列,其后还可以跟着一个文件名。路径中的第一个参数可以是根路径,以根路径开始的路径是绝对路径,否则就是相对路径。如果其路径不是合法路径则会抛出InvalidPathException异常。
绝对路径:
Path path=Paths.get("G:\\", "temp","temp.txt");
相对路径:
Path path2=Paths.get("temp", "temp.txt");
1.1组合或解析路径是司空见惯的操作,调用p.resolve(q)将按照下列规则返回一个路径:
A.如果q是绝对路径,则结果就是q
B.否则根据文件系统的规则将p后面跟着q作为结果
例子:
Path p=Paths.get("G:\\", "temp");
Path q=Paths.get("temp.txt");
Path path=p.resolve(q);
System.out.println(path);
//结果:G:\temp\temp.txt p=Paths.get("G:\\");
q=Paths.get("H:\\","temp");
path=p.resolve(q);
System.out.println(path);
//结果:H:\temp
2)读写文件
Files类是普通文件操作变得快捷,但是比较适合处理中等长度的文件,如果要处理的文件长度比较大,或者二进制文件,那么还是应该使用熟知的流(Stream)或者读入器(Reader)/写出器(Writer)。
Files的readAllBytes方法读取文件返回字节数,readAllLines返回一个String类型的列表,调用write方法写入字节组或者String类型的列表。
例子:
//字节数组写入文件内容
Path q=Paths.get("G:\\","temp.txt");
Files.write(q, "123123".getBytes("UTF-8")); //读出字节数组并打印出来
byte[]b=Files.readAllBytes(q);
System.out.println(new String (b)); //字符串写入文件内容
List<String>linesList=new ArrayList<String>();
linesList.add("11111111111111");
linesList.add("22222222222222");
linesList.add("33333333333333");
Files.write(q, linesList); //打印读取的数据
List<String>lineStrings=Files.readAllLines(q);
for (String itemString : lineStrings) {
System.out.println(itemString);
}
3)复制、移动和删除文件
Files提供很方便复制、移动、删除文件的方法,Files.copy(FromPaht,toPath),Files.move(fromPath,ToPath),Files.deleteIfExists(path),三个方法中可以增加一个StandardCopyOption枚举参数(REPLACE_EXISTING,COPY_ATTRIBUTES,ATOMIC_MOVE)。
// 复制文件到指定路径
Path path=Paths.get("G:\\", "temp.txt");
Path path2=Paths.get("H:\\","temp.txt");
Files.copy(path, path2, StandardCopyOption.REPLACE_EXISTING); // 移动文件到指定路径(StandardCopyOption.ATOMIC_MOVE不允许跨磁盘移动文件,去掉其选项可以跨磁盘移动文件)
Path path3=Paths.get("F:\\", "temp.txt");
Files.move(path2, path3, StandardCopyOption.ATOMIC_MOVE); // 删除文件(最好使用deleteIfExists方法删除文件,不建议使用delete方法删除文件,因为若文件不存在报异常)
boolean isDelete=Files.deleteIfExists(path3);
4)获取文件信息
Files的一些静态方法获取文件的相关属性,例如:exists(文件是否存在),isHidden(是否是隐藏文件),isReadable(是否可以读),isWriteable(是否可写),isExecutable(是否是可执行文件),isRegularFile(是否是普通文件),isDirectory(是否是目录),isSymbolicLink(是否是符号链接)。当然readAttributes方法可以获取更多的属性例如最后访问时间,修改时间等在此不举例说明了。
I/O流、文件操作的更多相关文章
- 笔记:I/O流-文件操作
Java库中使用 Path 和 Files 类封装了在用户机器上处理文件系统所需要的所有功能,可以使用Paths来获取一个具体的Path对象,来表示具体的路径. 路径 Path表示的是一个目录名序列, ...
- C#IO流文件操作
文件流 创建文件流 读写文件的第一步就是创建文件流,流是一个用于数据传输的个对象,它是FileStream类型,在创建一个文件流是需要在他的构造中指定参数 语法: FileStream 文件流对象=n ...
- IO流-文件操作
一.字节流读/写 文件 1.字节流 方式读取文件
- C#文件操作与编程
一:驱动器System.IO 软盘,优盘,光盘,硬盘 DriveInfo/DriveType DriveInfo:确定有关驱动器的信息:盘符,类型,可用空间 DriveType:确定DriveInfo ...
- 流的文件操作(File)
一.流的分类: 1.流按照方向分类:分为输入流和输出流,流的操作是相对于内存而言. 输入流的定义:当我们从数据源中将数据读取到内存中就称为输入流,也叫读取流. 输出流的定义:当我们将内存中处理好的数据 ...
- C#基础精华04(文件流,文件操作,File、Directory、Path,Directory)
文件流 FileStream 可读可写 大文件 释放 StreamReader 读取 释放 StreamWriter 写入 释放 using 中释放 File 可读可写 小文件 操作文 ...
- 文件操作总结:关于文本和二进制流(typeText&typeBinary)
本人能力.精力有限,所言所感都基于自身的实践和有限的阅读.查阅,如有错误,欢迎拍砖,敬请赐教——博客园:钱智慧. 总结: CFile,其自身是不提供缓冲区的(?但CFile又有一个Flush,这一点目 ...
- IOS文件操作的两种方式:NSFileManager操作和流操作
1.常见的NSFileManager文件方法 -(NSData *)contentsAtPath:path //从一个文件读取数据 -(BOOL)createFileAtPath: path cont ...
- JAVA中的I/O流以及文件操作
一 JAVA语言中主要通过流来完成IO操作. 流:计算机的输入输出之间流动的数据序列,也是类的对象.java中的流方式就像是建立在数据交换源和目的之间的一条通信路径. 数据源:计算机中的数据源是指可以 ...
- Java文件IO流的操作总结
Java中的IO操作涉及到的概念及相关类很多,很容易弄混,今天特来整理总结一下,并附上一份完整的文件操作的代码. 概念解析 读和写 流就是管道,向管道里面写数据用输出流:write 从管道里面读数据, ...
随机推荐
- 使用react context实现一个支持组件组合和嵌套的React Tab组件
纵观react的tab组件中,即使是github上star数多的tab组件,实现原理都非常冗余. 例如Github上star数超四百星的react-tab,其在render的时候都会动态计算哪个tab ...
- Eclipse equinox implementation of OSGi
Bundle package org.osgi.framework; public interface Bundle extends Comparable<Bundle> { int UN ...
- 《ArcGIS Runtime SDK for Android开发笔记》
开发笔记之基础教程 ArcGIS Runtime SDK for Android 各版本下载地址 <ArcGIS Runtime SDK for Android开发笔记>——(1).And ...
- mongodb 3.4 学习 (二)命令
# 使用或切换数据库 use <database name> # 显示所有数据库 show dbs # 显示所有collection show collections # 显示所有user ...
- 解决SQLite打开已有路径下的db问题
最近遇到的需要加载已有路径下(sd card下)db的问题,找了一下资料,以下是解决的方法,仅供参考(转载自eoe): SQLiteOpenHelper 是Android框架为我们提供的一个非常好的数 ...
- python:pymysql模块使用
一,基本使用 # 导入pymysql模块 import pymysql # 连接database conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,p ...
- Visual Studio 2010 RDLC 报表简单使用
原文:Visual Studio 2010 RDLC 报表简单使用 RDLC(Report Definition Language Client-side Processing)是Visual Stu ...
- umlの类图
版权声明:本文为博主原创文章,若要转载请注明出处!^_^ https://blog.csdn.net/u010892841/article/details/24844825 类图class diagr ...
- oracle 基础语法(二)
一.实现分页 说明以下tablename是同一表.这些操作是对同一表(tablename)的操作 ======================================= 如何实现分页提取记录 ...
- Python—面向对象04 绑定方法
坚持把梳理的知识都给记下来....... 嗯哼哼 1.绑定方法与非绑定方法 在类内部定义的函数,分为两大类: 绑定到类的方法:用classmethod装饰器装饰的方法. 为类量身定制 类.boud_m ...