0

让我首先确定以下事实:我是java新手,所以请耐心等待。

在我的编程课上,我们在家里使用 Scanner 类进行了练习。该活动显示了以下要练习的编码:

import java.io.*;
import java.util.*;

public class FileReadWrite {

     public static void main(String[] args) throws FileNotFoundException {
          String[] strArr = new String[100];

          int size = 0;

          try {
               Scanner scFile = new Scanner(new File("Names1.txt"));
               while (scFile.hasNext()) {
                    strArr[size] = scFile.next();
                    size++;
               }
               scFile.close();

               for (int i = 0; i < size; i++) {
                    System.out.print(strArr[i] + " ");
               }
          } catch (FileNotFoundException e) {
               System.err.println("FileNotFoundException: " + e.getMessage());
          }

     }
}

该程序似乎无法正常工作。我使用 NetBeans 运行代码,当我运行代码时,它不会显示文本文件 Names.txt 中的数据。这是为什么?然而,该程序确实完全没有错误地构建。

我试过浏览 Scanner 类 javadocs,但它对我没有帮助。

请向我解释,以便我从所犯的错误中吸取教训。

谢谢,约翰

4

4 回答 4

0

我同意user2170674。我还使用 Eclipse 在 Windows 机器上尝试了您的代码,一切顺利。也许您将文件放在错误的路径中。两种选择:

  • 您可以使用完整路径,例如(如果您使用的是 Windows)“C:\Names1.txt”;
  • 或者,更通用的解决方案,使用 JFileChooser:

          // create your FileChooser
          final JFileChooser chooser = new JFileChooser();
          // open the FileChooser
          int returnValue = chooser.showOpenDialog(null);
    
          // if you select a file
          if (returnValue == JFileChooser.APPROVE_OPTION) {
              // get the file and do what you need
              File file = chooser.getSelectedFile();
    
          } else {
              // throw an exception or just a message in the log...
          }
    
于 2013-05-29T03:15:05.847 回答
0

你的代码看起来不错。
使用几条消息进行调试。
最后,添加一个System.out.println()System.out.flush()
将异常块位置移动到文件使用后(最小化尝试块大小)并在 finally 块内移动 close()。
确保查看 Netbeans 输出窗口(窗口 -> 输出 -> 输出)

public class FileReadWrite {

 public static void main(String[] args) throws FileNotFoundException {
      System.out.println("##### Starting main method...");
      String[] strArr = new String[100];

      int size = 0;

      try {
           Scanner scFile = new Scanner(new File("Names1.txt"));
           while (scFile.hasNext()) {
                strArr[size] = scFile.next();
                size++;
           }
           System.out.println("##### Finished scan.  Found %d tokens.", size);
      } catch (FileNotFoundException e) {
           System.err.println("FileNotFoundException: " + e.getMessage());
      } catch (Exception e) {
           System.err.println("Exception: " + e.getMessage());
           e.printStackTrace();
      } finally {
           if (scFile != null) {
               scFile.close();
               System.out.println("##### Closed scanner.");
           }
      }
      System.out.println("##### Printing tokens...");

      for (int i = 0; i < size; i++) {
           System.out.print(strArr[i] + " ");
      }
      System.out.println("");
      System.out.println("##### Exiting main.");
 }
}
于 2013-05-29T04:22:29.387 回答
0

我在我的mac上试过你的代码,它可以工作。所以我认为您可能输入了错误的 Names1.txt 文件路径。

在 Java 中,当您简单地使用“what_ever_file_name.txt”作为文件路径时,Java 只会在您的源代码文件夹中搜索该文件。如果没有找到,将抛出“FILE_NOT_FOUND_EXCEPTION”。

于 2013-05-29T00:29:43.873 回答
-1

这是一个工作示例。也许尝试使用 BufferedReader。

import java.io.*;
import java.util.Scanner;

public class ScanXan {
public static void main(String[] args) throws IOException {

    Scanner s = null;

    try {
        s = new Scanner(new BufferedReader(new FileReader("xanadu.txt")));

        while (s.hasNext()) {
            System.out.println(s.next());
        }
    } finally {
        if (s != null) {
            s.close();
        }
    }
}
}

来自http://docs.oracle.com/javase/tutorial/essential/io/scanning.html

于 2013-05-28T22:59:53.523 回答