Java扫描程序从文件读取

时间:2013-05-28 22:51:46

标签: java arrays netbeans java.util.scanner readfile

让我首先确定以下事实:我是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中显示数据。这是为什么?然而,该程序完全构建没有错误。

我已经尝试过浏览器类javadocs,但它没有帮助我。

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

谢谢, 约翰

4 个答案:

答案 0 :(得分:0)

我在我的Mac上尝试了你的代码,它确实有效。所以我认为你可能会输入一个错误的Names1.txt文件路径。

在Java中,当您只使用“what_ever_file_name.txt”作为文件路径时,Java将只搜索源代码文件夹中的文件。如果找不到任何内容,将抛出“FILE_NOT_FOUND_EXCEPTION”。

答案 1 :(得分: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...
          }
    

答案 2 :(得分:0)

您的代码看起来不错 使用一些消息进行调试 最后,添加System.out.println()System.out.flush() 将异常块位置移动到文件使用后(最小化try块大小)并在finally块中移动close() 确保您查看Netbeans输出窗口(窗口 - &gt;输出 - &gt;输出)

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.");
 }
}

答案 3 :(得分:-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