0

我不确定为什么这段代码不允许我选择一个文件然后扫描它。我该如何调试它?

private String[][] importMaze(){
    String fileName;
    JFileChooser fc = new JFileChooser();
    int returnVal = fc.showOpenDialog(null);
    if(returnVal == JFileChooser.APPROVE_OPTION) {
          fileName = fc.getSelectedFile().getName();

    File f = new File(fileName);
    try {
        Scanner scan = new Scanner(f);
        int rows = scan.nextInt();
        int columns = scan.nextInt();
        String [][] maze = new String[rows][columns];
        int r = 0;
        while(scan.hasNext() && r<=rows){
            for(int c = 0; c<=columns;c++){
                maze[r][c]=scan.next();
            }
            r++;
        }
        return maze;
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}
    return null;
}
4

1 回答 1

2

我已经尝试了您的代码,它到达了对话框打开的位置,您可以选择一个文件。

我认为你的问题出在这里:

if(returnVal == JFileChooser.APPROVE_OPTION) {
      fileName = fc.getSelectedFile().getName();

File f = new File(fileName);

以下代码:

fileName = fc.getSelectedFile().getName();

仅返回文件的名称,而不是完整的文件路径。这反过来又导致

File f = new File(fileName);

不要打开您想要的文件,而是简单地“创建”(在您写出文件之前它实际上不会创建文件)文件。

您需要做的是将这三行替换为:

if(returnVal == JFileChooser.APPROVE_OPTION) {
  File f = fc.getSelectedFile();

这将使 f 引用您选择的文件。

于 2010-11-13T06:15:14.680 回答