行业资讯 2025年08月6日
0 收藏 0 点赞 586 浏览 3411 个字
摘要 :

文章目录 1.使用InputStream.readAllBytes()(从Java 9开始) 2.使用BufferedReader 3. Google Guava IO 3.1. 依赖关系 3.2. 使用ByteSource 3.3. 使用CharStreams 4.……




  • 1.使用InputStream.readAllBytes()(从Java 9开始)
  • 2.使用BufferedReader
  • 3. Google Guava IO
    • 3.1. 依赖关系
    • 3.2. 使用ByteSource
    • 3.3. 使用CharStreams
  • 4. Apache Commons IO
    • 4.1. 依赖关系
    • 4.2. 使用IOUtils
  • 5.使用Scanner将Java InputStream转换为String

学习如何使用BufferedReader、Scanner或IOUtils类将InputStream转换为String。

从InputStream中读取String在多种类型的应用程序中都是一个非常常见的需求,其中我们需要从网络流或文件系统中读取文件。

1.使用InputStream.readAllBytes()(从Java 9开始)

APIInputStream.readAllBytes() 将输入流转换为字节。然后我们使用 new String() 创建一个新 String 对象。

InputStream in = new FileInputStream(new File(\"C:/temp/test.txt\"));
String fileContent = new String( in.readAllBytes() );

在内部,它使用readNBytes(Integer.MAX_VALUE)方法。这意味着它不应该用于读取大于 2GB 的文件大小

2.使用BufferedReader

使用BufferedReader是将文件读入 String 的最简单、最流行的方法。它有助于将文件作为InputStream读取并逐行处理。

//使用BufferedReader
InputStream in = new FileInputStream(new File(\"C:/temp/test.txt\"));
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder out = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
    out.append(line);
}
String fileContent = out.toString();
reader.close();

或者,我们可以使用BufferedReader.lines()方法[在 Java 8 中添加]来获取行流并根据需要处理内容。

InputStream in = new FileInputStream(new File(\"C:/temp/test.txt\"));
String newLine = System.getProperty(\"line.separator\");
String fileContent;
try (Stream<String> lines = new BufferedReader(new InputStreamReader(in)).lines()) {
    fileContent = lines.collect(Collectors.joining(newLine));
}
//Use fileContent

3. Google Guava IO

Guava 库有一些非常有用的类和方法来执行 IO 操作。这些类隐藏了所有复杂性,否则就会暴露出来。

3.1. 依赖关系

Google Guava的 Maven 依赖项。

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>31.1-jre</version>
</dependency>

3.2. 使用ByteSource

ByteSource代表了一个可读的字节源,例如文件。它具有通常通过打开一个流、执行某些操作,然后关闭已打开的流来实现的实用方法。

它的asCharSource(charset)方法将从源中读取的字节解码为给定字符集中的字符。它将字符作为String返回作为方法的输出。

//使用 ByteSource
InputStream inputStream = new FileInputStream(new File(\"C:/temp/test.txt\"));
ByteSource byteSource = new ByteSource() {
    @Override
    public InputStream openStream() throws IOException {
        return inputStream;
    }
};
String fileContent = byteSource
      .asCharSource(Charsets.UTF_8)
      .read();

3.3. 使用CharStreams

CharStreams类还提供了用于处理字符流的实用方法。结合InputStreamReader和CharStreams使用有助于将InputStream转换为String。

以下是使用Google Guava库中的CharStreams类将InputStream转换为String的Java程序示例:

//使用 CharStreams
InputStream inputStream = new FileInputStream(new File(\"C:/temp/test.txt\"));
String fileContent = null;
try (final Reader reader = new InputStreamReader(inputStream)) {
    fileContent = CharStreams.toString(reader);
}
System.out.println(fileContent);

4. Apache Commons IO

4.1. 依赖关系

在项目中包含以下依赖项以包含common-io jar。

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>

4.2. 使用IOUtils

Apache commons 有一个非常有用的类IOUtils来将文件内容读取到字符串中。它使代码更加干净且易于阅读。它也提供了更好的性能。

使用两种方法之一 :

  1. IOUtils.copy()
  2. IOUtils.toString()
//使用IOUtils
//方法 1 IOUtils.copy()
StringWriter writer = new StringWriter();
IOUtils.copy(new FileInputStream(new File(\"C:/temp/test.txt\")), writer, \"UTF-8\");
String fileContent = writer.toString();
System.out.println(fileContent);
//方法 2 IOUtils.toString()
String fileContent = IOUtils.toString(new FileInputStream(new File(\"C:/temp/test.txt\")), \"UTF-8\");
System.out.println(fileContent);

5.使用Scanner将Java InputStream转换为String

虽然使用Scanner类不是很流行,但它是有效的。它之所以有效是因为Scanner会遍历流中的标记,而在这个过程中,我们可以使用“输入边界的开头”来分隔标记,从而为流的整个内容提供只一个标记。

FileInputStream fin = new FileInputStream(new File(\"C:/temp/test.txt\"));

java.util.Scanner scanner = new java.util.Scanner(fin,\"UTF-8\").useDelimiter(\"\\A\");

String fileContent = scanner.hasNext() ? scanner.next() : \"\";

scanner.close();

这就是将InputStream读取为String全部内容了。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9185.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号