用于读取资源文本文件到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");