【问题标题】:Java - directly reading a file without downloading and storing locally [duplicate]Java - 直接读取文件而不在本地下载和存储[重复]
【发布时间】:2026-02-08 23:05:02
【问题描述】:

我想直接读取一个文件,把它放到一个字符串中,而不是在本地存储文件。我曾经用一个旧项目来做这个,但我没有源代码了。我以前可以通过这种方式获取我网站的源代码。

但是,我不记得我是通过“InputStream to String array of lines to String”做到的,还是直接将它读入String。

有这个功能吗,还是我记错了?

(注意:这个函数相当于file_get_contents($path)的PHP)

【问题讨论】:

    标签: java


    【解决方案1】:

    您需要使用InputStreamReader 将二进制输入流转换为适合阅读文本的Reader

    之后,您需要阅读到阅读器的末尾。

    就我个人而言,我会用Guava 来做这一切,它有处理这类事情的便捷方法,例如CharStreams.toString(Readable).

    当您创建 InputStreamReader 时,请确保您提供了适当的字符编码 - 如果您不这样做,您会收到垃圾文本(就像尝试将 MP3 文件当作 WAV 一样播放,因为示例)。

    【讨论】:

    • 次要:要获取文件的 Reader,您可以直接转到 FileReader,而无需显式创建 InputStream 或 InputStreamReader。
    • 正是我想要的,谢谢!
    • @Vance:避免像瘟疫一样使用 FileReader - 它不允许您指定要使用的编码:(
    【解决方案2】:

    查看apache-commons-io 和您的用例FileUtils.readFileToString(File file) (从路径中获取文件应该不难)。

    您可以使用该库或查看代码 - 因为它是开放的。

    【讨论】:

      【解决方案3】:

      没有直接的方法将File 读入String

      但有一个快速的替代方案 - 将 File 读入字节数组并将其转换为字符串。

      未经测试:

      File f = new File("/foo/bar");
      InputStream fStream = new FileInputStream(f);
      ByteArrayOutputStream bStream = new ByteArrayOutputStream();
      for(int data = fStream.read(); data > -1; data = fStream.read()) {
        b.write(data);
      }
      String theResult = new String(bStream.toByteArray(), "UTF-8");
      

      【讨论】: