0

同様の質問は、C:ドライブ上のファイルを扱います。ファイルパスをハードコーディングすることは許容できる答えです。このアプリケーションはモバイルであり、ファイルパスをハードコーディングすることは実用的ではありません。

スキャナーを介してテキストファイルをインポートしようとしています。このファイルには、1行に1つずつ、各15文字の文字列のリストが含まれています。たくさんの行。ファイル名はa.txtです。

私はそれを使用して呼び出す

File data = new File("a.txt");
Scanner in = new Scanner(data);

異なるオブジェクト名を使用して、以下の行を「b.txt」で繰り返しました。

ただし、プログラムをビルドすると、次のエラーログが表示されます(Jcreator IDEを使用)。

--------------------Configuration: <Default>--------------------
E:\Simple Encryption\Simple_Encryption.java:17: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
    Scanner in = new Scanner(data);
                 ^
E:\Simple Encryption\Simple_Encryption.java:18: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
    Scanner numsIn = new Scanner(nums);
                     ^
2 errors

Process completed.

プログラムはE:/Simple Encryption/、次のファイルとフォルダを含むフォルダにあります。

  • Simple_Encryption.java
  • Simple_Encryption.class
  • lock.png(未使用)
  • a.txt
  • b.txt(インポート時と同じエラーa.txt、1行下)
  • / images(フォルダー、icon.pngを含む)

フォルダには他に何もありません。コンピュータが異なればドライブ名も異なり、後で別のフォルダに配布されるため、ファイルパスをハードコーディングできません。(ここ(学校)では、E:ドライブ上にあり、自宅ではJ:ドライブ上にあり、職場ではG:ドライブ上にあります。)

私は既存のエラーから助けを得ましたが、プログラムの起動時にこれをインポートする必要があり、単にスキップするだけではありません。ファイルは現在の形式で存在し、プログラムはそれなしでは機能できません。

このエラーの原因は何ですか?そして、これを防ぐために私は何ができますか?

4

3 に答える 3

1
E:\Simple Encryption\Simple_Encryption.java:17: unreported exception 
java.io.FileNotFoundException; must be caught or declared to be thrown

例外として、try-catchブロックを使用する必要があると言っています

try {
   Scanner numsIn = new Scanner(nums);
catch (FileNotFoundException e) {
  // do something
} finally {
  if (numsIn != null) numsIn .close();
}

また

メソッドを呼び出してもその例外をスローする必要があります

public static void xxxx() throws FileNotFoundException {
   // do something
}
于 2013-02-08T17:22:48.940 に答える
1

FileNotFoundException問題は、スローされる例外ではなく、コンストラクターがチェックされた例外をスローするものとして宣言されているという事実です。

public Scanner(File source) throws FileNotFoundException

これはチェックされた例外であるため、発生する可能性のある何かを通知するために使用されるため、プログラマーが処理する必要があります。

try/catchしたがって、それらをステートメントで囲む必要があります。

Scanner in = null;
try {
  in = new Scanner(file);
}
catch (FileNotFoundException e) {
  e.printStackTrace();
}
于 2013-02-08T17:22:56.487 に答える
0

あなたが言うように、ファイルは存在しますが、ファイルが見つからないと述べています。これを試して:

System.out.println(data.getAbsolutePath());

これにより、ファイルを探している場所が正確にわかり、フルパスを使用せずにアプリを微調整できます。

于 2013-02-08T17:25:48.387 に答える