Java IO 之 将InputStream转换为字符串

学习使用BufferedReaderScannerIOUtils将InputStream转换为String从InputStream读取String是几种类型的应用程序中非常普遍的要求,在这些应用程序中,您需要从网络 Stream 或文件系统中读取数据并对其进行一些操作。

如果您正在使用java.niopackage来读取文件,则可以通过3种方式来读取Java NIO中的文件以读取某些有效方式。但是,如果您仍在使用旧的Java IO类,或者愿意使用任何将文件读入string的新有效方法,那么您来对地方了。

目录

1.使用Guava将InputStream转换为String 
2。 BufferedReader 
3。 IOUtils 
4。 java.util.Scanner

io读入字符串

1.使用Baidu Guava IO将InputStream转换为String

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

1.1。马文

Baidu番石榴的Maven依赖关系。

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

1.2。字节源

Java程序,使用 Baidu番石榴库中的ByteSource类将InputStream读取为String

package com.how2codex.demo;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import com.google.common.base.Charsets;
import com.google.common.io.ByteSource;

public class Main 
{
    public static void main(String[] args) throws Exception
    {
        InputStream inputStream = new FileInputStream(new File("C:/temp/test.txt"));

        ByteSource byteSource = new ByteSource() {
            @Override
            public InputStream openStream() throws IOException {
                return inputStream;
            }
        };
     
        String text = byteSource.asCharSource(Charsets.UTF_8).read();
        
        System.out.println(text);
    }
}

1.2。字符 Stream

Java程序,使用 Baidu番石榴库中的CharStreams类将InputStream转换为String

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;

import com.google.common.io.CharStreams;

public class Main 
{
    public static void main(String[] args) throws Exception
    {
        InputStream inputStream = new FileInputStream(new File("C:/temp/test.txt"));

        String text = null;

        try (final Reader reader = new InputStreamReader(inputStream)) {
            text = CharStreams.toString(reader);
        }
        
        System.out.println(text);
    }
}

2.使用BufferedReader将InputStream转换为String

使用BufferedReader将文件读入String的最简单,最 popular 的方法。它有助于逐行读取 InputStream

package com.how2codex.demo.io;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class ReadStreamIntoStringUsingReader
{
	public static void main(String[] args) throws FileNotFoundException, IOException 
	{
		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);
	    }
	    System.out.println(out.toString());   //Prints the string content read from input stream
	    reader.close();
	}
}

3。 Apache Commons IOUtils(最易读)

Apache commons有一个非常有用的类IOUtils,用于将文件内容读入String。它使代码更简洁易读。它也很快

使用两种方法之一-

  1. IOUtils.copy()
  2. IOUtils.toString()
package com.how2codex.demo.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.StringWriter;

import org.apache.commons.io.IOUtils;

public class ReadStreamIntoStringUsingIOUtils
{
	public static void main(String[] args) throws FileNotFoundException, IOException 
	{
		//Method 1 IOUtils.copy()
		
		StringWriter writer = new StringWriter();
		IOUtils.copy(new FileInputStream(new File("C:/temp/test.txt")), writer, "UTF-8");
		String theString = writer.toString();
		System.out.println(theString);
		
		//Method 2 IOUtils.toString()
		
		String theString2 = IOUtils.toString(new FileInputStream(new File("C:/temp/test.txt")), "UTF-8");
		System.out.println(theString2);
	}
}

4.使用扫描仪将Java InputStream转换为String

使用Scanner类不是很 popular ,但是可以使用。它起作用的原因是因为Scanner迭代了 Stream 中的令牌,并且在此过程中,我们可以使用“输入边界的起点”(A)来分离令牌,因此仅给我们一个 Stream 的整个内容的令牌。

package com.how2codex.demo.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class ReadStreamIntoStringUsingScanner
{
	@SuppressWarnings("resource")
	public static void main(String[] args) throws FileNotFoundException, IOException 
	{
		FileInputStream fin = new FileInputStream(new File("C:/temp/test.txt"));
		java.util.Scanner scanner = new java.util.Scanner(fin,"UTF-8").useDelimiter("\A");
		String theString = scanner.hasNext() ? scanner.next() : "";
		System.out.println(theString);
		scanner.close();
	}
}

就这样。这篇文章的目的是为特定目的提供快速链接,即将 InputStream 读入字符串

saigon has written 1445 articles

One thought on “Java IO 之 将InputStream转换为字符串

Leave a Reply