readAllLines
public static List<String> readAllLines(Path path)
throws IOException
Read all lines from a file. Bytes from the file are decoded into characters using the UTF-8 charset.
This method works as if invoking it were equivalent to evaluating the expression:
Files.readAllLines(path, StandardCharsets.UTF_8)
Parameters:
path - the path to the file
Returns:
the lines from the file as a List; whether the List is modifiable or not is implementation dependent and therefore not specified
Throws:
IOException - if an I/O error occurs reading from the file or a malformed or unmappable byte sequence is read
SecurityException - In the case of the default provider, and a security manager is installed, the checkRead method is invoked to check read access to the file.
Since:
1.8
/**
* Read all lines from a file. This method ensures that the file is
* closed when all bytes have been read or an I/O error, or other runtime
* exception, is thrown. Bytes from the file are decoded into characters
* using the specified charset.
*
* <p> This method recognizes the following as line terminators:
* <ul>
* <li> <code>\u000D</code> followed by <code>\u000A</code>,
* CARRIAGE RETURN followed by LINE FEED </li>
* <li> <code>\u000A</code>, LINE FEED </li>
* <li> <code>\u000D</code>, CARRIAGE RETURN </li>
* </ul>
* <p> Additional Unicode line terminators may be recognized in future
* releases.
*
* <p> Note that this method is intended for simple cases where it is
* convenient to read all lines in a single operation. It is not intended
* for reading in large files.
*
* @param path
* the path to the file
* @param cs
* the charset to use for decoding
*
* @return the lines from the file as a {@code List}; whether the {@code
* List} is modifiable or not is implementation dependent and
* therefore not specified
*
* @throws IOException
* if an I/O error occurs reading from the file or a malformed or
* unmappable byte sequence is read
* @throws SecurityException
* In the case of the default provider, and a security manager is
* installed, the {@link SecurityManager#checkRead(String) checkRead}
* method is invoked to check read access to the file.
*
* @see #newBufferedReader
*/
public static List<String> readAllLines(Path path, Charset cs) throws IOException {
try (BufferedReader reader = newBufferedReader(path, cs)) {
List<String> result = new ArrayList<>();
for (;;) {
String line = reader.readLine();
if (line == null)
break;
result.add(line);
}
return result;
}
}
The following example shows one way to apply regular expressions to search for matches in a file. Inspired by Unix’s grep , JGrep.java takes two arguments: a file name and the regular expression to match. The output shows each line where a match occurs and the match position(s) within the line.
// strings/JGrep.java
// (c)2017 MindView LLC: see Copyright.txt
// We make no guarantees that this code is fit for any purpose.
// Visit http://OnJava8.com for more book information.
// A very simple version of the "grep" program
// {java JGrep
// WhitherStringBuilder.java 'return|for|String'}
import java.nio.file.*;
import java.util.regex.*;
import java.util.stream.*;
public class JGrep {
public static void main(String[] args) throws Exception {
if (args.length < 2) {
System.out.println("Usage: java JGrep file regex");
System.exit(0);
}
Pattern p = Pattern.compile(args[1]);
// Iterate through the lines of the input file:
int index = 0;
Matcher m = p.matcher("");
for (String line : Files.readAllLines(Paths.get(args[0]))) {
m.reset(line);
while (m.find()) {
System.out.println("line:" + line);
System.out.println(index++ + ": " + m.group() + ": " + m.start());// m.start() index is zero-based.
}
}
}
}
/* My Output:
line:// strings/WhitherStringBuilder.java
0: String: 18
line:// We make no guarantees that this code is fit for any purpose.
1: for: 47
line:// Visit http://OnJava8.com for more book information.
2: for: 28
line:// Visit http://OnJava8.com for more book information.
3: for: 44
line:public class WhitherStringBuilder {
4: String: 20
line: public String implicit(String[] fields) {
5: String: 9
line: public String implicit(String[] fields) {
6: String: 25
line: String result = "";
7: String: 4
line: for (String field : fields) {
8: for: 4
line: for (String field : fields) {
9: String: 9
line: return result;
10: return: 4
line: public String explicit(String[] fields) {
11: String: 9
line: public String explicit(String[] fields) {
12: String: 25
line: StringBuilder result = new StringBuilder();
13: String: 4
line: StringBuilder result = new StringBuilder();
14: String: 31
line: for (String field : fields) {
15: for: 4
line: for (String field : fields) {
16: String: 9
line: return result.toString();
17: return: 4
line: return result.toString();
18: String: 20
*/
references:
1. On Java 8 - Bruce Eckel
2. https://github.com/wangbingfeng/OnJava8-Examples/blob/master/strings/JGrep.java
3. https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#readAllLines-java.nio.file.Path-
4. https://github.com/wangbingfeng/OnJava8-Examples/blob/master/strings/WhitherStringBuilder.java
本文介绍Java中使用Files类的readAllLines方法读取文件内容,并通过示例展示如何利用正则表达式搜索匹配项。具体演示了如何在文件中查找特定字符串并返回其位置。
1699

被折叠的 条评论
为什么被折叠?



