如何将InputStream转换为String?

时间:2012-06-16 05:58:25

标签: java nullpointerexception inputstream bufferedreader

我试过了:

  InputStream file = Test.class.getResourceAsStream("highScore.txt");
  BufferedReader br = new BufferedReader (new InputStreamReader(file));
  String text;
  text = br.readLine();
  while (text!=null) {
    System.out.println (text);
  }

但我收到NullPointerException错误。

4 个答案:

答案 0 :(得分:2)

您尝试读取为InputStream的资源应该存在于Java Classpath中。否则getResourceAsStream()会返回null,当您尝试从中创建NullPointerException时会导致InputStreamReader。有关如何阅读资源的信息,请参阅different-ways-of-loading-a-file-as-an-inputstream

答案 1 :(得分:2)

请尝试使用简单文件:

InputStream file = new FileInputStream("highScore.txt");

被修改

如果您在确定正确路径时遇到问题,请执行以下操作:

System.out.println(new File("highScore.txt").getAbsolutePath());

那将很快告诉你"当前"目录是。如果您需要上一个目录级别,可能会发现需要使用"../highScore.txt";如果需要下去,则可能需要"/somedir/highScore.txt"等。

我发现打印绝对路径是解决这类问题的最快方法。

答案 2 :(得分:1)

你去吧

StringWriter writer = new StringWriter();
IOUtils.copy(file, writer, encoding);
String theString = writer.toString();

我怀疑你的getResourceAsStream是否正在返回正确的InputStream.put日志

如果您想使用BufferedReader,那么您也可以使用以下代码段。

    BufferedReader br = new BufferedReader(new InputStreamReader(is));

    StringBuilder sb = new StringBuilder();

    String line;

    while ((line = br.readLine()) != null) 
     {
        sb.append(line);
     } 

   System.out.println(sb.toString());

   br.close();

答案 3 :(得分:0)

您可以将此单行用于文件到字符串

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ScannerSample {

    public static void main(String[] args) throws FileNotFoundException {
     //Z means: "The end of the input but for the final terminator, if any"
        String output = new Scanner(new File("file.txt")).useDelimiter("\\Z").next();
        System.out.println("" + output);
    }
}