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