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?

