TUTORIALProgrammingFETCHED
Java java.nio.file.Files.newInputStream() 方法
Java java.nio.file.Files.newInputStream() 方法 Java java.nio.file.Files newInputStream() 方法用于打开一个文件,返回一个输入流以便从该文件中读取数据。这是 Java NIO 提供的更现代的文件操作方式,相比传统的 FileInputStream,它提供了更好的性能和更丰富的功能。 方法定义 [mycode4 type='java&#..
Updated 7/16/2026
Tutorial detail pages default to noindex.
Java java.nio.file.Files.newInputStream() 方法
newInputStream() 方法用于打开一个文件,返回一个输入流以便从该文件中读取数据。这是 Java NIO 提供的更现代的文件操作方式,相比传统的 FileInputStream,它提供了更好的性能和更丰富的功能。
方法定义
public static InputStream newInputStream(Path path, OpenOption... options)
throws IOException
throws IOException
参数说明
Path path- 要打开的文件的路径对象OpenOption... options- 可选参数,指定文件的打开方式
返回值
返回一个新的 InputStream 对象,可用于从文件中读取数据
异常
IOException- 如果打开文件时发生 I/O 错误SecurityException- 如果安全管理器存在且拒绝访问该文件
基本用法
示例 1:最简单的文件读取
实例
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class FilesExample {
public static void main(String[] args) {
Path path = Paths.get("example.txt");
try (InputStream inputStream = Files.newInputStream(path)) {
int data;
while ((data = inputStream.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class FilesExample {
public static void main(String[] args) {
Path path = Paths.get("example.txt");
try (InputStream inputStream = Files.newInputStream(path)) {
int data;
while ((data = inputStream.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这个例子中,我们:
- 创建一个
Path对象指向要读取的文件 - 使用
Files.newInputStream()方法获取输入流 - 使用 try-with-resources 语句确保流会自动关闭
- 逐个字节读取文件内容并打印
高级用法
使用 OpenOption 参数
OpenOption 接口允许我们指定文件的打开方式。常用的实现类是 StandardOpenOption,它提供了以下选项:
READ- 以读取方式打开文件(默认)WRITE- 以写入方式打开文件APPEND- 以追加方式打开文件TRUNCATE_EXISTING- 如果文件已存在,则截断文件CREATE- 如果文件不存在则创建新文件CREATE_NEW- 创建新文件,如果文件已存在则失败DELETE_ON_CLOSE- 当流关闭时删除文件SPARSE- 提示文件系统创建稀疏文件SYNC- 要求每次更新都同步写入存储DSYNC- 要求每次更新都同步写入存储(仅内容)
示例 2:指定打开选项
实例
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
public class FilesExampleWithOptions {
public static void main(String[] args) {
Path path = Paths.get("example.txt");
try (InputStream inputStream = Files.newInputStream(path,
StandardOpenOption.READ,
StandardOpenOption.DSYNC)) {
// 读取文件内容...
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
public class FilesExampleWithOptions {
public static void main(String[] args) {
Path path = Paths.get("example.txt");
try (InputStream inputStream = Files.newInputStream(path,
StandardOpenOption.READ,
StandardOpenOption.DSYNC)) {
// 读取文件内容...
} catch (IOException e) {
e.printStackTrace();
}
}
}
与传统 FileInputStream 的比较
优点
- 更现代的 API:基于
Path接口,与 NIO 的其他部分更好地集成 - 更灵活:可以通过
OpenOption指定多种打开方式 - 更好的性能:在某些情况下比
FileInputStream性能更好 - 异常处理更清晰:抛出的异常类型更具体
缺点
- Java 7+:需要 Java 7 或更高版本
- 学习曲线:对于熟悉传统 I/O 的开发者需要适应
最佳实践
- 总是使用 try-with-resources:确保输入流被正确关闭
- 处理大文件时使用缓冲:考虑包装在
BufferedInputStream中提高性能 - 检查文件是否存在:在尝试打开前可以使用
Files.exists(path) - 处理异常:妥善处理可能出现的
IOException
示例 3:最佳实践示例
实例
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class FilesBestPractice {
public static void main(String[] args) {
Path path = Paths.get("largefile.dat");
if (!Files.exists(path)) {
System.err.println("文件不存在: " + path);
return;
}
try (InputStream rawStream = Files.newInputStream(path);
BufferedInputStream bufferedStream = new BufferedInputStream(rawStream)) {
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = bufferedStream.read(buffer)) != -1) {
// 处理读取的数据...
}
} catch (IOException e) {
System.err.println("读取文件时出错: " + e.getMessage());
}
}
}
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class FilesBestPractice {
public static void main(String[] args) {
Path path = Paths.get("largefile.dat");
if (!Files.exists(path)) {
System.err.println("文件不存在: " + path);
return;
}
try (InputStream rawStream = Files.newInputStream(path);
BufferedInputStream bufferedStream = new BufferedInputStream(rawStream)) {
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = bufferedStream.read(buffer)) != -1) {
// 处理读取的数据...
}
} catch (IOException e) {
System.err.println("读取文件时出错: " + e.getMessage());
}
}
}
总结
Files.newInputStream() 是 Java NIO 中一个强大而灵活的文件读取工具,相比传统的 FileInputStream 提供了更多的功能和更好的性能。通过合理使用 OpenOption 参数和遵循最佳实践,可以编写出高效、可靠的文件读取代码。
Java java.nio.file.Files