0

txt で Java.util.scanner を使用して解析しようとしています。ファイルが見つからないため、ファイルをスキャンしようとすると問題が発生します。

私のクラスは、txt ファイルの同じパッケージ内にあります。クラスの同じパッケージ内のファイルをスキャンする方法を教えてください。

public class PhoneBook {
  private ArrayList<PhoneBookEntry>[] buckets;
  public void load() {
    try {
      Scanner scan = new Scanner(new File("phone.txt"));
    } catch (FileNotFoundException e) {
      System.out.println("File Not Found"); 
    } 
  } 
  public static void main(String[]args) {
    PhoneBook phone = new PhoneBook(); 
    phone.load(); 
  } 
} 

これがエラーのスタックトレースです

java.io.FileNotFoundException: phone.txt (The system cannot find the file specified) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(Unknown Source) at java.util.Scanner.<init>(Unknown Source) at HashSet.PhoneBook.load(PhoneBook.java:13) at HashSet.PhoneBook.main(PhoneBook.java:23)

4

3 に答える 3

3

ファイルをクラス パスのルートに配置し (コンパイル後、.classファイルが生成されるルート フォルダーにファイルが表示されるはずです)、次のコード構文を使用します。

    InputStream is = getClass().getClassLoader().getResourceAsStream("phone.txt");
    Scanner fileScanner = new Scanner(is);
于 2012-12-04T20:24:46.823 に答える
1
new File("phone.txt")

現在の作業ディレクトリでファイルを検索します。これは、Java 仮想マシンを起動したディレクトリです。

クラスと同じパッケージにあると言いますが、これはおそらく別のディレクトリです(例:src/com/mypackage)。

ファイルをプロジェクトのルート ディレクトリに移動してみてください。その後、それをロードできるはずです。

@Yogendra からの回答には別のアプローチが示されています。これは、ファイルがファイルと同じパッケージ バイナリ ディレクトリにある場合にも機能するはず.classです。しかし、この種のファイルをリソースとしてロードするかどうかはわかりません。

于 2012-12-04T20:22:32.483 に答える
0

コメントの 1 つに記載されているように、.jar が生成される場所にファイルを配置する必要があります。Netbeans/Eclipse から実行している場合、これはプロジェクトのルート フォルダーになります。コンパイルされた .jar から実行している場合、.jar と同じディレクトリになります。パッケージは、ソース ファイルを整理および分離するために使用される単なるフォルダーです。

しかし、とにかくファイルを同じパッケージに入れたい場合は、いつでも次のようにすることができます (パッケージが 1 つしかないと仮定して):

new File("./src/myPackage/myFile.txt")
于 2012-12-04T20:28:28.157 に答える