JAVA第9章 输入输出课件
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9.2.5 小文件的读写
• Files类提供了从一个较小的二进制文件和文 本文件读取和写入的方法。readAllBytes() 方法和readAllLines()方法分别是从二进制 文件和文本文件读取。这些方法可以自动打 开和关闭流,但不能处理大文件。
9.2.5 小文件的读写
• public static byte[] readAllBytes(Path path):从指定的二进制文件中读取所有字 节。
9.2 Files类操作
• java.nio.类是一个功能非常强大的类。 • 该类定义了大量的静态方法用来读、写和
操纵文件和目录。Files类主要操作Path对 象。
9.2.1 创建和删除目录和文件
• public static Path createDirectory(Path dir, <?>…attrs)
= ();
1. 类
• Path getPath(String first, String …more) • String getSeparator() • Iterable<Path> getRootDirectores() • boolean isOpen() • boolean isReadOnly()
• static Path setOwner(Path path, UserPrincipal) :设置指定文件的所有者。
9.2.2 文件属性操作
• 下面程序演示了Files类几个方法的使用。 • 程序9.1
R u n
9.2.3 文件和目录的复制与移动
• 使用Files类的copy()方法可以复制文件和 目录,使用move()方法可以移动目录和文 件。copy()方法的一般格式为: public static Path copy( Path source, Path target, CopyOption…options)
• static getLastModifiedTime(Path path, LinkOption... options):返回指定文件的最后修 改时间。
• static Path setLastModifiedTime(Path path, ) :设置指定文件的最后修改时间。
• static UserPrincipal getOwner(Path path, LinkOption... options) :返回指定文件的所有者 。
9.2.1 创建和删除目录和文件
• public static void deleteIfExists(Path path)
• 如果path对象存在则将其删除。如果path 是目录,要求目录必须为空,如果不为空 则抛出DirectoryNotEmptyException异常 。
9.2.2 文件属性操作
• static boolean isRegularFile(Path path, LinkOption...):如果指定的Path对象是一个文件 返回true。
9.2.2 文件属性操作
• Files类中包含了下面一些方法获得或设置文 件的一个属性。
• static long size(Path path):返回指定文 件的字节大小。
try { (source,target,
StandardCopyOption.REPLACE_EXISTING); }catch (NoSuch nse) {
nse.printStackTrace(); }catch (IOException ioe) {
ioe.printStackTrace(); }
– COPY_ATTRIBUTES,将属性复制到新文件中 。
– REPLACE_EXISTING,如果文件存在,将它 替换掉。
9.2.3 文件和目录的复制与移动
• 下面代码说明了copy()方法的使用。
Path source = Paths.get("D:\\study\\demo\\report.txt"), target = Paths.get("D:\\study\\demo\\backup.txt");
第9章 Java输入/输出
内容提要
• Java对输入/输出(I/O)的支持从JDK1.0 开始就有了,它是通过java.io包中的类和 接口提供支持的。
• JDK 1.4中增加了New I/O(NIO)API, Java NIO API是java.nio包及其子包的一 部分。
• JDK 7中又新引进了一些包,称作NIO.2, 用来对现有技术进行补充。这些新的接口 和类通过java.nio.file包及其子包提供。
• static boolean isDirectory(Path path, LinkOption…options):如果指定的Path 对象是一个目录返回true。
• static boolean isHidden(Path path):如 果指定的Path对象是隐藏的返回true。
9.2.2 文件属性操作
• source为源文件,target为目标文件
9.2.3 文件和目录的复制与移动
• 参数options为CopyOption接口对象,它 是java.nio.file包的一个接口, StandardCopyOption枚举是 CopyOption接口的一个实现,提供了下 面三个复制选项:
– ATOMIC_MOVE,将移动文件作为一个原子的 文件系统操作。
9.2.2 文件属性操作
• public static boolean isReadable(Path path) :检查path所指的文件或目录是否可读。
• public static boolean isWritable(Path path): 检查path所指的文件或目录是否可写。
• public static boolean isExecutБайду номын сангаасble(Path path):检查path所指的文件或目录是否可执行 。
9.1.2 Path对象
• 在Java 7之前,文件和目录用File对象表示 。由于使用File类存在着许多不足,因此在 Java 7中应使用NIO.2的java.nio.接口代 替File。
• Path对象在文件系统中表示一个路径,可 以是一个文件、一个目录,也可以是一个 符号链接,它还可以表示一个根目录。
Path p2 = Paths.get(args[0]); Path p3 = Paths.get(URI.create(
""));
3. 检索路径信息
• Path对象可以看做是一个名称序列,每一 级目录可以通过索引指定。
• 目录结构的最顶层索引为0,目录结构的最 底层元素索引是n-1,n是总层数。
• 可以使用Files类的方法检查Path对象表示 的文件或目录是否存在、是否可读、是否 可写、是否可执行等。
9.2.2 文件属性操作
• public static boolean exists(Path path, LinkOption…):检查path所指的文件或目 录是否存在。
• public static boolean notExists(Path path, LinkOption…):检查path所指的文 件或目录是否不存在。注意,!(path)与 (path)并不等价。如果exists(path)与 notExists(path)都返回false,表示文件不 能被检验。
9.2.1 创建和删除目录和文件
• public static void delete(Path path) • 删除由path指定的目录、文件或符号链接
。如果path是一个目录,要求目录必须为 空。如果path是一个符号链接,将只删除 链接,链接所指的目录不会被删除。 • 如果path不存在,则抛出NoSuch异常。
• 创建由dir指定的目录,参数attrs指定目录 的属性,如果不需要设置属性,可忽略该 参数。如果创建的目录已经存在,该方法 将抛出异常。
9.2.1 创建和删除目录和文件
• public static Path createFile(Path file, <?>…attrs)
• 创建由file指定的文件,参数attrs指定文件 的属性,如果不需要设置属性,可忽略该 参数。如果文件的父目录不存在,该方法 会抛出一个IOException异常。如果已经存 在一个与file指定的文件同名的文件,将抛 出异常。
9.1.1 文件系统和路径
• 当今的大多数操作系统都支持文件和目录 ,并且允许目录包含子目录。处于目录树 顶部的目录称作根目录。
• Windows系统可以有多个根目录:C:\、 D:\等,且不支持符号链接。
• 图9.1显示了一个Windows系统中目录树结 构。这里的根目录是D:\。
9.1.1 文件系统和路径
• 例如,getName(0)方法将返回最顶层目 录名称。
3. 检索路径信息
Path path = Paths.get("D:\\study\\user\\report.txt"); System.out.println("toString:" + path.toString()); System.out.println("get:" + path.get()); System.out.println("getName(0): " + path.getName(0)); System.out.println("getNameCount: " +
D:\ study
user report.txt
com
log
demo
Hello.java
9.1.1 文件系统和路径
• 在文件系统中,文件和目录都是通过路径 表示的,路径通常以根结点开头。例如, 图9.1中的report.txt文件表示如下: D:\study\user\report.txt
• 这里,“D:\”表示根结点,反斜线(\) 为路径分隔符。
9.1.2 Path对象
• 在 Windows 系 统 中 , Path 对 象 使 用 Windows 语 法 表 示 ( 如 , D:\study\com\demo)。与Path对应的 文件或目录可以不存在。
1. 类
• 表示一个文件系统,它是一个抽象类,可 以调用类的getDefault()静态方法来获取 当前的文件系统。
path.getNameCount()); System.out.println("subpath(0,2): " +
path.subpath(0,2)); System.out.println("getParent: " + path.getParent()); System.out.println("getRoot: " + path.getRoot());
2. 创建Path实例
• Path实例包含确定文件或目录位置的信息 。在创建Path实例时,通常要提供一系列 名称,如根元素或文件名等。一个Path可 以只包含路径名或文件名。
• 可以使用Paths(注意是复数)类的get() 方法创建Path对象:
2. 创建Path实例
Path p1 = Paths.get("D:\\study\\com\\Hello.java");
本章要点
• 本章首先讨论NIO.2关于文件的I/O,包括 Path实例的创建和Files类的使用,然后讨 论Java的流式I/O,其中包括:字节流I/O 和字符流I/O、SeekableByteChannel类 以及对象流等。
9.1 文件I/O概述
• 在计算机系统中通常使用文件存储信息和 数据。文件存储在目录中,目录以层次结 构组织。目录可有一个或多个根结点。根 结点下是文件或目录(在Windows系统中 称文件夹),每个目录中可包含文件或子 目录。
9.1.1 文件系统和路径
• 路径可以是绝对的,也可以是相对的。 • 绝对路径是以根元素为起点的路径,例如
,D:\study\user\report.txt就是绝对路径 。绝对路径包含定位文件的所有信息。 • 相对路径是不包含根元素的路径,例如, study\com\Hello.java是相对路径。只通 过相对路径不能定位文件,要准确定位文 件还需要另外的路径信息。