java:将InputStream转换为String的不同方法

490 阅读2分钟

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

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

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

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

Apach commons Io库

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

commons-io 库添加到pom.xml

    
      commons-io
      commons-io
      2.6
    

这里有一个例子

  • 使用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中添加以下依赖项

    
      com.google.guava
      guava
      30.1.1-jre
    

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、common-io和guava库中读取输入文件并将流转换为字符串的不同方法。