Gop*_*opi 256 java file-io file
我试图将一个简单的文本文件读入一个字符串.当然,通常的方法是获取输入流并使用readLine()进行迭代并将内容读入String.
在过去做过数百次之后,我只是想知道如何在最少的代码行中做到这一点?是不是像java这样的东西String fileContents = XXX.readFile(myFile/*File*/)......而是看起来像这样简单的东西?
我知道像Apache Commons IO这样的库提供了这样的简化,甚至我可以编写一个简单的Util类来实现这一点.但我想知道的是 - 这是一个如此频繁的操作,每个人都需要为什么Java不提供这么简单的功能呢?是不是真的有一个方法可以使用某些默认或指定的编码将文件读入字符串?
pol*_*nts 350
是的,你可以在一行中做到这一点(尽管IOException你不想要强大的处理).
String content = new Scanner(new File("filename")).useDelimiter("\\Z").next();
System.out.println(content);
Run Code Online (Sandbox Code Playgroud)
这使用a java.util.Scanner,告诉它分隔输入\Z,这是字符串锚的结束.这最终使输入有一个实际的令牌,这是整个文件,因此可以通过一次调用来读取next().
有一个构造函数接受a File和a String charSetName(在许多其他重载中).这两个构造函数可能抛出FileNotFoundException,但是像所有Scanner方法一样,IOException不能抛出这些构造函数.
如果发生与否,您可以Scanner通过该ioException()方法查询自身IOException.在阅读内容之后,您可能还需要明确close()表示Scanner,因此Scanner最好将引用存储在局部变量中.
为了完整性,如果您拥有这些非常有信誉且非常有用的第三方库,这些是非常好的选择:
com.google.common.io.Files包含许多有用的方法.这里相关的是:
String toString(File, Charset)
StringList<String> readLines(File, Charset)
List<String>,每行一个条目org.apache.commons.io.IOUtils 还提供类似的功能:
String toString(InputStream, String encoding)
InputStream作为String List readLines(InputStream, String encoding)
List的String每行,一个条目Jim*_*Jim 190
从Java 7 (API描述)开始,您可以:
new String(Files.readAllBytes(Paths.get(filePath)), StandardCharsets.UTF_8);
其中filePath是表示要加载的文件的String.
Rak*_*yal 42
你可以使用apache commons IO ..
FileInputStream fisTargetFile = new FileInputStream(new File("test.txt"));
String targetFileStr = IOUtils.toString(fisTargetFile, "UTF-8");
Run Code Online (Sandbox Code Playgroud)
小智 33
这应该适合你:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
public static void main(String[] args) throws IOException {
String content = new String(Files.readAllBytes(Paths.get("abc.java")));
}
Run Code Online (Sandbox Code Playgroud)
cju*_*gel 23
import org.apache.commons.io.FileUtils;
//...
String contents = FileUtils.readFileToString(new File("/path/to/the/file"), "UTF-8")
Run Code Online (Sandbox Code Playgroud)
您可以在详细信息中查看de javadoc方法.
Jon*_*eet 10
不要编写自己的util类来做到这一点 - 我建议使用Guava,它充满了各种各样的善良.在这种情况下,您需要Files该类(如果您真的只是在阅读文件)或CharStreams以进行更通用的阅读.它具有将数据读入字符串(readLines)或完整(toString)列表的方法.
它对二进制数据也有类似的有用方法.然后是图书馆的其他部分......
我同意令人讨厌的是,标准库中没有类似的东西.哎呀,只能够供应CharSet到FileReader将让生活有点简单...
小智 7
另一种替代方法是:
其他选择是使用实用程序提供的开源库
http://commons.apache.org/io/api-1.4/index.html?org/apache/commons/io/IOUtils.html
为什么java不提供这样一个常见的util API?
a)保持API通用,以便程序员处理编码,缓冲等.
b)让程序员做一些工作并编写/共享opensource util库:D ;-)
| 归档时间: |
|
| 查看次数: |
438475 次 |
| 最近记录: |