我正在尝试显示文件打开对话框,然后创建扫描程序以读取所选文件。当我运行我的代码时,它抛出一个FileNotFoundException
,这对我没有意义,因为它在打开文件选择器窗口之前抛出异常。
package files;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
public class FileManipulations {
public static void main (String[] args) {
SwingUtilities.invokeLater(() -> runGUI());
}
public static void runGUI () {
JFileChooser chooser = new JFileChooser();
chooser.showOpenDialog(null);
File file = chooser.getSelectedFile();
System.out.println(file.exists());
Scanner fromFile = new Scanner(file);
}
}
答案 0 :(得分:2)
从您的示例代码开始...
import java.io.File;
import java.util.Scanner;
import javax.swing.JFileChooser;
import javax.swing.SwingUtilities;
public class FileManipulations {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> runGUI());
}
public static void runGUI() {
JFileChooser chooser = new JFileChooser();
chooser.showOpenDialog(null);
File file = chooser.getSelectedFile();
System.out.println(file.exists());
Scanner fromFile = new Scanner(file);
}
}
您收到编译错误,因为Scanner(File)
可能会抛出FileNotFoundException
您需要catch
异常或重新抛出异常,例如......
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import javax.swing.JFileChooser;
import javax.swing.SwingUtilities;
public class FileManipulations {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> runGUI());
}
public static void runGUI() {
JFileChooser chooser = new JFileChooser();
switch (chooser.showOpenDialog(null)) {
case JFileChooser.APPROVE_OPTION:
File file = chooser.getSelectedFile();
System.out.println(file.exists());
try (Scanner fromFile = new Scanner(file)) {
while (fromFile.hasNextLine()) {
String text = fromFile.nextLine();
System.out.println(text);
}
} catch (FileNotFoundException exp) {
exp.printStackTrace();
}
break;
}
}
}
您可能还想查看How to Use File Choosers,并确保检查showOpenDialog
的返回结果,以便了解对话框的关闭方式
另外,请查看The try-with-resources Statement,了解有关如何管理资源的更多详细信息
答案 1 :(得分:0)
我认为你的代码有点如下:
scala> for {
| i <- 0 to 20
| pow <- scala.math.pow(2, i).toInt
| rec <- 1/pow
| } println(pow + "\t" + rec)
好的,现在这很好用。只有当我遇到问题时,我才会在文件选择器中选择一个文件,然后单击取消。发生这种情况时,扫描仪本身不会在&#34; file&#34;中创建为值。一片空白。我建议手动添加一个检查以查看是否选择了任何文件if(file == null)System.out.println(&#34;请选择一个文件&#34;);或抛出自己的例外。如果您不想突然出现nullPointerException,则会弹出。 编辑:正如madProgrammer指出的那样,file.getName()宁愿抛出nullPointerException我试着将它更改为file.exists(),如果没有选择文件,仍然会抛出异常。所以反而可能检查file == null更好。 file.exists()检查这个路径名表示的文件是否存在,但是如果我们从未对它进行初始化,即只是在文件选择器中取消,那么它没有帮助。