编写一个名为q1的公共静态方法,该方法不带参数,返回类型为boolean。此方法将尝试打开名为“location.txt”的文件,如果文件存在则返回true,并在任何行上包含字符串“statistics”作为子字符串,如果未找到“statistics”,则返回false。如果“location.txt”不存在,此方法也将返回false。
这就是我所做的,我不知道如何将它作为布尔值。
public static boolean q1() {
String filename = x;
// creating file name location.txt
try {
String x = "location.txt";
System.out.print("location.txt file has been created");
String textToWrite = "statistical";
Files.write(Paths.get(x), textToWrite.getBytes());
}
catch (IOException e) {
boolean r = false;
return r;
}
BufferedReader br = new BufferedReader(new FileReader("location.txt"));
String textToWrite;
while ((textToWrite = br.readLine()) != null) {
}
return f;
}
答案 0 :(得分:3)
使用Java 8中引入的Stream API:
/**
* Returns whether the file 'location.txt' exists and any line contains the string "statistical".
*
* @return true if the file exists and any line contains "statistical", false otherwise
* @throws IOException if an I/O error occurs
*/
public static boolean q1() throws IOException {
Path path = Paths.get("location.txt");
try (Stream<String> lines = Files.lines(path)) {
return lines.anyMatch(line -> line.contains("statistical"));
} catch (FileNotFoundException e) {
return false;
} catch (UncheckedIOException e) {
// Stream wraps IOExceptions, because streams don't throw checked exceptions. Unwrap them.
throw e.getCause();
}
}
编辑:使用try-with-resource来处置文件系统资源。
返回的流封装了一个Reader。如果需要及时处理文件系统资源,则应使用try-with-resources构造来确保在流操作完成后调用流的close方法。
编辑2:解开流的UncheckedIOException,使调用者更容易处理异常。
此方法返回后,从读取文件或读取格式错误或不可映射的字节序列时发生的任何后续I / O异常都包含在将导致读取的Stream方法抛出的UncheckedIOException中发生。如果在关闭文件时抛出IOException,它也会被包装为UncheckedIOException。
答案 1 :(得分:1)
您的代码的第一部分似乎是创建一个满足给定条件的文件(即,它生成以下代码,并且要求毫无意义)。不要这样做。逐行读取文件。检查您读取的行是否包含您要搜索的字符串。如果是return true
。否则return false
。像,
public static boolean q1() {
String fileName = "location.txt", toFind = "statistical";
try (BufferedReader br = new BufferedReader(new FileReader(new File(fileName)))) {
String line;
while ((line = br.readLine()) != null) {
if (line.contains(toFind)) {
return true;
}
}
} catch (IOException e) {
e.printStackTrace();
}
return false;
}