Java NIO - 文件
Java NIO 包提供了一个名为 Files 的实用 API,它主要用于使用其静态方法操作文件和目录,这些方法主要在 Path 对象上工作。
如 Path 教程中所述,Path 接口是在 Java 7 版本的文件包中引入到 Java NIO 包中的。因此本教程适用于相同的文件包。
此类仅由对文件、目录或其他类型文件进行操作的静态方法组成。在大多数情况下,此处定义的方法将委托给关联的文件系统提供程序来执行文件操作。
Files 类中定义了许多方法,也可以从 Java 文档中读取。在本教程中,我们尝试介绍 Java NIO Files 类的所有方法中的一些重要方法。
Files 类的重要方法。
以下是 Java NIO Files 类中定义的重要方法。
createFile(Path filePath, FileAttribute attrs) − Files 类提供此方法使用指定路径创建文件。
示例
package com.java.nio; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class CreateFile { public static void main(String[] args) { //初始化路径对象 Path path = Paths.get("D:file.txt"); //创建文件 try { Path createdFilePath = Files.createFile(path); System.out.println("Created a file at : "+createdFilePath); } catch (IOException e) { e.printStackTrace(); } } }
输出
Created a file at : D:\data\file.txt
copy(InputStream in, Path target, CopyOption� options) − 此方法用于将所有字节从指定输入流复制到指定目标文件,并返回读取或写入的字节数作为长值。此参数的 LinkOption 具有以下值 −
COPY_ATTRIBUTES − 将属性复制到新文件,例如上次修改时间属性。
REPLACE_EXISTING − 如果存在,则替换现有文件。
NOFOLLOW_LINKS − 如果文件是符号链接,则复制链接本身,而不是链接的目标。
示例
package com.java.nio; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.util.List; public class WriteFile { public static void main(String[] args) { Path sourceFile = Paths.get("D:file.txt"); Path targetFile = Paths.get("D:fileCopy.txt"); try { Files.copy(sourceFile, targetFile, StandardCopyOption.REPLACE_EXISTING); } catch (IOException ex) { System.err.format("I/O Error when copying file"); } Path wiki_path = Paths.get("D:fileCopy.txt"); Charset charset = Charset.forName("ISO-8859-1"); try { List<String> lines = Files.readAllLines(wiki_path, charset); for (String line : lines) { System.out.println(line); } } catch (IOException e) { System.out.println(e); } } }
输出
To be or not to be?
createDirectories(Path dir, FileAttribute<?>...attrs) − 此方法用于通过创建所有不存在的父目录来使用给定路径创建目录。
delete(Path path) − 此方法用于从指定路径删除文件。如果文件在指定路径不存在,或者文件是目录并且可能不为空且无法删除,则抛出 NoSuchFileException。
exists(Path path) − 此方法用于检查文件是否存在于指定路径,如果文件存在,则返回 true,否则返回 false。
readAllBytes(Path path) −此方法用于从给定路径的文件读取所有字节,并返回包含从文件读取的字节的字节数组。
示例
package com.java.nio; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; public class ReadFile { public static void main(String[] args) { Path wiki_path = Paths.get("D:file.txt"); Charset charset = Charset.forName("ISO-8859-1"); try { List<String> lines = Files.readAllLines(wiki_path, charset); for (String line : lines) { System.out.println(line); } } catch (IOException e) { System.out.println(e); } } }
输出
Welcome to file.
size(Path path) − 此方法用于获取指定路径下文件的大小(以字节为单位)。
write(Path path, byte[] bytes, OpenOption options) − 此方法用于将字节写入指定路径下的文件。
示例
package com.java.nio; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; public class WriteFile { public static void main(String[] args) { Path path = Paths.get("D:file.txt"); String question = "To be or not to be?"; Charset charset = Charset.forName("ISO-8859-1"); try { Files.write(path, question.getBytes()); List<String> lines = Files.readAllLines(path, charset); for (String line : lines) { System.out.println(line); } } catch (IOException e) { System.out.println(e); } } }
输出
To be or not to be?