如何在Java中把InputStream转换为String

240 阅读2分钟

在这篇文章中,我们将通过实例学习如何在Java中把InputStream转换为String。

在Java中,如果我们想读和写文件,我们必须使用输入和输出流。这些I/O流是文件或设备或任何其他来源。

例如,InputStream 用于从文件系统中读取数据OutputStream 用于向文件系统中写入数据

在这个例子中,我们将学习如何使用java io类、commons-io和guava库以及java8流API将InputStream转换成字符串。

Apache commons Io库

Apache Commons IO库提供了输入和输出操作的实用类。

commons-io 库添加到pom.xml

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

这里有一个例子

  • 使用FileInputStream 创建一个InputStream 来读取文件
  • 使用IOUtils.toString 方法将流的内容复制到Writer中
import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.commons.io.IOUtils.IOUtils;
public class FileTest {
    public static void main(String[] args) throws Exception{
        InputStream inputStream = new FileInputStream("c:/file.txt");
        String myString = IOUtils.toString(inputStream, "UTF-8");


    }
}

使用java.io.StringWriter

  • 使用FileInputStream 创建一个InputStream 来读取文件
  • 创建一个StringWriter ,从文件中复制字符串内容
  • 使用IOUtils.copy 方法将流内容复制到Writer中。
  • 使用StringWriter.toString() 方法转换为字符串
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.StringWriter;

import org.apache.commons.io.IOUtils.IOUtils;
public class FileTest {
    public static void main(String[] args) throws Exception{
        InputStream inputStream = new FileInputStream("c:/file.txt");
        StringWriter stringWriter = new StringWriter();
        IOUtils.copy(inputStream, stringWriter, "UTF-8");
        System.out.println(stringWriter.toString();) 



    }
}

Java8中的缓冲读卡器

Java8提供了Stream API,通过InputStream和BufferedReader来读写文件。

  • 创建了一个用于读取文件的输入流
  • 使用InputStreamReader 类创建一个BufferedReader
  • 调用java8 stream APIlines 方法,懒洋洋地返回一个流。
  • 最后,调用带有换行符的collect来转换输入字符串
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.stream.Collectors;

public class FileTest {
    public static void main(String[] args) throws Exception {
        InputStream inputStream = new FileInputStream("c:/file.txt");
        String output = new BufferedReader(new InputStreamReader(inputStream))
                .lines().collect(Collectors.joining("\n"));


    }
}

上面的例子同样可以改写为使用parallel() 方法进行平行蒸汽读取

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.stream.Collectors;

public class FileTest {
    public static void main(String[] args) throws Exception {
        InputStream inputStream = new FileInputStream("c:/file.txt");
        String result = new BufferedReader(new InputStreamReader(inputStream))
                .lines().parallel().collect(Collectors.joining("\n"));


    }
}

guava CharStreams

guava 是一个google库,用于对文件进行读写操作。

在pom.xml中添加以下依赖项

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

CharStreams.toString 将输入流转换为指定的字符串Charsets.UTF_8

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import com.google.common.io.CharStreams;
import com.google.common.base.Charsets;
public class FileTest {
    public static void main(String[] args) throws Exception {
        InputStream inputStream = new FileInputStream("c:/file.txt");
        String output = CharStreams.toString(new InputStreamReader(
                inputStream, Charsets.UTF_8));



    }
}

结论

综上所述,我们已经学会了在java8、commons-io和guava库中读取输入文件并将其转换为字符串的不同方法。