是否有一种方法将资源中的文本文件读入字符串?

我想这是一个普遍的需求,但我在谷歌上找不到任何实用工具。


当前回答

如果你有番石榴,那么你可以使用:

String fileContent = Files.asCharSource(new File(filename), Charset.forName("UTF-8")).read();

(其他解决方案提到了番石榴的其他方法,但已弃用)

其他回答

Guava有一个“toString”方法用于将文件读入String:

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

String content = Files.toString(new File("/home/x1/text.log"), Charsets.UTF_8);

这个方法不需要文件在类路径中(就像Jon Skeet之前的回答一样)。

我创建了这样一个NO-dependency静态方法:

import java.nio.file.Files;
import java.nio.file.Paths;

public class ResourceReader {
    public  static String asString(String resourceFIleName) {
        try  {
            return new String(Files.readAllBytes(Paths.get(new CheatClassLoaderDummyClass().getClass().getClassLoader().getResource(resourceFIleName).toURI())));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
class CheatClassLoaderDummyClass{//cheat class loader - for sql file loading
}

我喜欢akosicki用愚蠢的扫描仪技巧回答的问题。这是我在Java 8中看到的最简单的没有外部依赖的工作(实际上一直追溯到Java 5)。如果你可以使用Java 9或更高版本(因为InputStream.readAllBytes()是在Java 9中添加的),这里有一个更简单的答案:

String text = new String(AppropriateClass.class.getResourceAsStream("foo.txt")
    .readAllBytes());

您可以使用下面的Java代码

new String(Files.readAllBytes(Paths.get(getClass().getResource("example.txt").toURI())));

下面是一个使用Java 11的Files.readString的解决方案:

public class Utils {
    public static String readResource(String name) throws URISyntaxException, IOException {
        var uri = Utils.class.getResource("/" + name).toURI();
        var path = Paths.get(uri);
        return Files.readString(path);
    }
}