获取txt文件的内容我通常使用扫描仪并遍历每一行以获取内容:
Scanner sc = new Scanner(new File("file.txt"));
while(sc.hasNextLine()){
String str = sc.nextLine();
}
java api是否提供了使用一行代码获取内容的方法,如:
String content = FileUtils.readFileToString(new File("file.txt"))
答案 0 :(得分:26)
不是内置的API - 但Guava确实是其他宝藏之一。 (这是一个神话般的图书馆。)
String content = Files.toString(new File("file.txt"), Charsets.UTF_8);
有类似的方法可以读取任何Readable,或者将二进制文件的全部内容作为字节数组加载,或者将文件读入字符串列表等。
请注意,此方法现已弃用。新的等价物是:
String content = Files.asCharSource(new File("file.txt"), Charsets.UTF_8).read();
答案 1 :(得分:15)
使用Java 7,这些行就有一个API。
答案 2 :(得分:14)
IOUtils.toString(new FileReader("file.txt"), "utf-8");
答案 3 :(得分:8)
public class MyClass
{
// variable 'a' is initialize as a = 5 only once
private int a = 5;
private void CalculateSum(int b)
{
// every time the function is called it uses this (a) value
int sum = a + b;
// But if sum = 10...
if (sum == 10)
{
// then value of 'a' changes to 10
a = 10;
}
}
// Some other code here
}
答案 4 :(得分:4)
您可以将FileReader类与BufferedReader一起使用来读取文本文件。
File fileToRead = new File("file.txt");
try( FileReader fileStream = new FileReader( fileToRead );
BufferedReader bufferedReader = new BufferedReader( fileStream ) ) {
String line = null;
while( (line = bufferedReader.readLine()) != null ) {
//do something with line
}
} catch ( FileNotFoundException ex ) {
//exception Handling
} catch ( IOException ex ) {
//exception Handling
}
我希望我有所帮助。 :)
答案 5 :(得分:0)
经过一些测试,我发现BufferedReader
和Scanner
在各种情况下都是有问题的(前者经常无法检测到新行,而后者通常会从JSON字符串中剥离空格)由 org.json 库导出)。还有其他方法可用,但是问题是它们仅在某些Java版本(例如,对于Android开发人员而言是不好的)之后才受支持,并且您可能不希望仅为这样的单一目的而使用Guava或Apache commons库。因此,我的解决方案是将整个文件读取为字节,然后将其转换为字符串。以下代码摘自我的一个爱好项目:
/**
* Get byte array from an InputStream most efficiently.
* Taken from sun.misc.IOUtils
* @param is InputStream
* @param length Length of the buffer, -1 to read the whole stream
* @param readAll Whether to read the whole stream
* @return Desired byte array
* @throws IOException If maximum capacity exceeded.
*/
public static byte[] readFully(InputStream is, int length, boolean readAll)
throws IOException {
byte[] output = {};
if (length == -1) length = Integer.MAX_VALUE;
int pos = 0;
while (pos < length) {
int bytesToRead;
if (pos >= output.length) {
bytesToRead = Math.min(length - pos, output.length + 1024);
if (output.length < pos + bytesToRead) {
output = Arrays.copyOf(output, pos + bytesToRead);
}
} else {
bytesToRead = output.length - pos;
}
int cc = is.read(output, pos, bytesToRead);
if (cc < 0) {
if (readAll && length != Integer.MAX_VALUE) {
throw new EOFException("Detect premature EOF");
} else {
if (output.length != pos) {
output = Arrays.copyOf(output, pos);
}
break;
}
}
pos += cc;
}
return output;
}
/**
* Read the full content of a file.
* @param file The file to be read
* @param emptyValue Empty value if no content has found
* @return File content as string
*/
@NonNull
public static String getFileContent(@NonNull File file, @NonNull String emptyValue) {
if (file.isDirectory()) return emptyValue;
try {
return new String(readFully(new FileInputStream(file), -1, true), Charset.defaultCharset());
} catch (IOException e) {
e.printStackTrace();
return emptyValue;
}
}
您可以简单地使用getFileContent(file, "")
来读取文件的内容。