Java 为什么打开和读取文件需要两个try-catch块?
我试图读取一个文件,但它要求两个try-catch块,一个用于打开文件,另一个用于读取其内容。为什么需要这样做Java 为什么打开和读取文件需要两个try-catch块?,java,file-handling,Java,File Handling,我试图读取一个文件,但它要求两个try-catch块,一个用于打开文件,另一个用于读取其内容。为什么需要这样做 String line = null; try { File file = new File("F:\\Mobile Extractor.txt"); BufferedReader reader = new BufferedReader(new FileReader(file)); while((l
String line = null;
try {
File file = new File("F:\\Mobile Extractor.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
while((line=reader.readLine())!=null) {
System.out.println(line);
}
reader.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
IOException
需要try-catch
块
它将检查文件中的可用内容。如果没有内容,则将抛出IOException
,否则将显示内容
应该是这样的:
String line = null;
try {
File file = new File("F:\\Mobile Extractor.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
try {
while((line=reader.readLine())!=null)
{
System.out.println(line);
}
} catch(IOException ex)
{
System.out.println(ex.getMessage());
}
reader.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
如果您使用的是7之前的版本,请考虑使用
finally
块以避免内存泄漏并关闭流。从Java7开始,您可以使用try with resources是最佳实践
String line = null;
File file = new File("F:\\Mobile Extractor.txt");
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(reader!=null){
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
尝试使用以下资源:
String line = null;
File file = new File("F:\\Mobile Extractor.txt");
try(BufferedReader reader = new BufferedReader(new FileReader(file));) {
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
声明语句出现在try关键字后面的括号内。JavaSE7及更高版本中的类
BufferedReader
实现了接口Java.lang.AutoCloseable
。由于BufferedReader
实例是在try with resource
语句中声明的,因此无论try语句是正常完成还是突然完成(由于方法BufferedReader.readLine
抛出IOException
),它都将关闭。try java8,您将不需要任何东西。你可以这样做
import java.nio.file.Files;
import java.nio.file.Paths;
Files.lines(Paths.get(path))
.filter(l -> l.contains(searchWord)).forEach(System.out::println);
请在问题中插入您的代码请添加您的代码而不是图像。您可以通过粘贴它来实现这一点,请确保跳过一行并使用ctrl+K缩进所有代码。我已附加了一个图像。我试图上传代码,但它给出了缩进错误。我已经上传了代码。它还要求为while循环添加try-catch块。是的,我知道它将在没有try-catch块的情况下引发IO异常,但为什么需要两个try-catch块?在添加
throws-IOException
子句之前,它不会引发任何异常。一个try-catch块用于读取文件,另一个用于检查文件的存在性。函数式编程可以避免编写大量的锅炉板代码。