感谢你解决我的第一个问题,我现在收到一个新的错误
import java.io.*;
import javax.swing.*;
public class FileBrowser {
public static void main(String[] args) throws IOException {
JFileChooser chooser = new JFileChooser();
chooser.showOpenDialog(null);
File file = chooser.getSelectedFile();
String filename = file.getName();
System.out.println("You have selected: " + filename);
FileReader fr = new FileReader("filename");
BufferedReader br = new BufferedReader(fr);
String s;
while((s = br.readLine()) != null) {
System.out.println(s);
}
fr.close();
}
}
错误:
java.io.FileNotFoundException: filename (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:97)
at java.io.FileReader.<init>(FileReader.java:58)
at FileBrowser.main(FileBrowser.java:13)
是从文件浏览器中无法正确获取文件名的错误吗?
答案 0 :(得分:9)
Java中有检查和未检查的异常。必须声明您的方法抛出的已检查异常。 FileReader
constructor可以抛出FileNotFoundException
,这是一个经过检查的例外。代码中的其他一些方法调用也可以抛出已检查的异常。
如果调用一个可以抛出已检查异常的方法,那么您需要捕获异常并处理它或声明您的方法抛出此异常。即使您认为永远不会抛出异常,您也必须执行其中一项操作。不这样做是编译错误。
添加throws
:
public static void main(String[] args) throws IOException {
或使用try / catch块包围代码:
try {
// ...
} catch (IOException e) {
e.printStackTrace();
// Or ask the user for a different filename...
}
答案 1 :(得分:1)
环绕FileReader fr = new FileReader("filename")
;尝试并捕获如下:
try {
FileReader fr = new FileReader("filename");
} catch (Exception e) {
System.out.println("Error: " + e);
}
答案 2 :(得分:0)
除了 Adel Boutrons和Mark Byers 的答案。你还需要做一些改变。
首先,您正在选择文件选择器,因此您还需要
String path = file.getAbsolutePath();
这将给出文件的绝对路径,包括文件名。
FileReader fr = new FileReader("filename");
这里你没有提供任何文件名,只是字符串,删除“文件名”。
FileReader fr = new FileReader(path.replace("\\", File.separator));
如果找不到文件,则会抛出FileNotFoundException。