用于读取资源文本文件到string(Java)

有没有任何工具可以帮助将资源中的文本文件读取到string中。 我想这是一个stream行的要求,但我没有find谷歌search后的任何效用。

是的, Guava在“ Resources类中提供了这个。 例如:

 URL url = Resources.getResource("foo.txt"); String text = Resources.toString(url, Charsets.UTF_8); 

你可以使用旧的愚蠢的扫描器技巧 oneliner做那没有象番石榴的任何额外的依赖性:

 String text = new Scanner(AppropriateClass.class.getResourceAsStream("foo.txt"), "UTF-8").useDelimiter("\\A").next(); 

伙计们,不要使用第三方的东西,除非你真的需要。 JDK中已经有很多function了。

番石榴有一个“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); 

这种方法不需要文件在类path中(如Jon Skeet以前的答案)。

对于Java 7:

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

apache-commons-io有一个实用程序名称FileUtils

 URL url = Resources.getResource("myFile.txt"); File myFile = new File(url.toURI()); String content = FileUtils.readFileToString(myFile, "UTF-8"); // or any other encoding 

yegor256已经使用Apache Commons IOfind了一个很好的解决scheme :

 import org.apache.commons.io.IOUtils; String text = IOUtils.toString(this.getClass().getResourceAsStream("foo.xml"), "UTF-8"); 

我自己经常遇到这个问题。 为了避免依赖小项目,当我不需要commons或者其他类似的东西的时候,我经常写一个小的效用函数。 以下是将文件的内容加载到string缓冲区中的代码:

 StringBuffer sb = new StringBuffer(); BufferedReader br = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("path/to/textfile.txt"), "UTF-8")); for (int c = br.read(); c != -1; c = br.read()) sb.append((char)c); System.out.println(sb.toString()); 

在这种情况下,指定编码重要,因为您可能已经使用UTF-8编辑了文件,然后将其放入jar文件中,打开该文件的计算机可能使用CP-1251作为其本机文件编码(例如) ; 所以在这种情况下你永远不知道目标编码,因此显式的编码信息是至关重要的。 另外,通过char读取文件char的循环看起来效率低下,但在BufferedReader上使用,所以实际上相当快。

您可以使用下面的Java代码forms

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

如果你想从你项目的src / main / resources文件testcase / foo.json这样的项目资源中获取你的string,可以这样做:

 String myString= new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("testcase/foo.json").toURI()))); 

请注意,其他一些示例中缺lessgetClassLoader()方法。

这是我的做法很好

 public String getFileContent(String fileName) { String filePath = "myFolder/" + fileName+ ".json"; try(InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream(filePath)) { return IOUtils.toString(stream, "UTF-8"); } catch (IOException e) { // Please print your Exception } } 

纯粹而简单的Java 8解决scheme

如果您使用Java 8,下面这个简单的方法将会很好:

 /** * Reads given resource file as a string. * * @param resourceFileName the path to the resource file * @return the file's contents */ public String getResourceFileAsString(String resourceFileName) { InputStream is = getClass().getClassLoader().getResourceAsStream(resourceFileName); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); return reader.lines().collect(Collectors.joining("\n")); } 

它也适用于jar文件中的资源。

没有必要使用大型的胖库。 除非你已经在使用Guava或Apache Commons IO,否则将这些库添加到你的项目中只是为了能够以stringforms读取一个文件似乎有点太多了。

使用Apache公共的FileUtils。 它有一个方法readFileToString

我正在使用以下从classpath读取资源文件:

 import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; import java.util.Scanner; public class ResourceUtilities { public static String resourceToString(String filePath) throws IOException, URISyntaxException { try (InputStream inputStream = ResourceUtilities.class.getClassLoader().getResourceAsStream(filePath)) { return inputStreamToString(inputStream); } } private static String inputStreamToString(InputStream inputStream) { try (Scanner scanner = new Scanner(inputStream).useDelimiter("\\A")) { return scanner.hasNext() ? scanner.next() : ""; } } } 

不需要第三方依赖关系。

番石榴也有Files.readLines()如果你想返回值List<String>逐行:

 List<String> lines = Files.readLines(new File("/file/path/input.txt"), Charsets.UTF_8); 

请参考这里比较3种方式( BufferedReader与番石榴的Files与番石榴的Resources )从文本文件中获取String

随着一套静态import,番石榴解决scheme可以非常紧凑的单线:

 toString(getResource("foo.txt"), UTF_8); 

以下导入是必需的:

 import static com.google.common.io.Resources.getResource import static com.google.common.io.Resources.toString import static java.nio.charset.StandardCharsets.UTF_8 
 public static byte[] readResoureStream(String resourcePath) throws IOException { ByteArrayOutputStream byteArray = new ByteArrayOutputStream(); InputStream in = CreateBffFile.class.getResourceAsStream(resourcePath); //Create buffer byte[] buffer = new byte[4096]; for (;;) { int nread = in.read(buffer); if (nread <= 0) { break; } byteArray.write(buffer, 0, nread); } return byteArray.toByteArray(); } Charset charset = StandardCharsets.UTF_8; String content = new String(FileReader.readResoureStream("/resource/...*.txt"), charset); String lines[] = content.split("\\n");