在这篇文章中,我们将通过实例学习如何在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 - 调用
java8stream 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库中读取输入文件并将其转换为字符串的不同方法。