2017-12-06 1 views
0

テキストファイルからデータを読み込んで配列に格納するプログラムを取得しようとしています。テキストファイルには、惑星に関するデータが含まれています。スキャナが自分のファイルから読み取れないのはなぜですか?

Mercury 
4.151002e10 
2.642029e10 
-1.714167e9 
-3.518882e4 
4.355473e4 
6.785804e3 
3.302e23 

私のファイルの名前はあるtest.txt: はここでの例です。 class.javaファイルと同じディレクトリにあります。私はSystem.out.println(new File("test.txt").getAbsolutePath());を使って、ディレクトリパスが正しいかどうかを確認しました。コードがコンパイルしようとしたのと同じディレクトリにあるかどうかを確認するためにSystem.out.println(new File("."));を使用しました。私はそれが正しいディレクトリにあったことを信じるように導かれた)。私はファイルを見つけるさまざまな方法を試しました。ファイル名をUnicode、UTF-8、またはANSIに変更することはキーワードではありませんでした。ファイル内の.\testは、同じディレクトリ内を検索しますが、どちらも機能しませんでした。

は、ここに私のコードです:

public static void defaultPlanetArray(){ 
    Planet[] solarSystem; 
    solarSystem = new Planet[9]; 
    PhysicsVector dummyAcceleration = new PhysicsVector(); 

    System.out.println(new File("test.txt").getAbsolutePath()); 
    System.out.println(new File(".")); 

    try{ 
    File file = new File("C:\\Users\\Lizi\\Documents\\Uni Work\\Year 2\\PHYS281\\Project\\test.txt"); 
    Scanner scnr = new Scanner(file); 
    } 
    catch(FileNotFoundException e){ 
    System.out.println("File not found!"); 
    } 
    int i = 0; 

    while(i<9 && scnr.hasNextLine()){ 
    //read values from file and set as Planet object, then set to array. 
    i++ 
    } 

PhysicsVectorと惑星は、私が作成した両方のクラスです。この抜粋とは別に、PhysicsVectorとPlanetの残りの部分は問題なくコンパイルされます。私はこのコードの特定のビットをコンパイルしようとすると、私が手:

.\Planet.java:65: error: cannot find symbol while(i<9 && scnr.hasNextLine()){ ^

私はこれを推測している、それはファイルを見つけることができないので、変数SCNRがトライセクションで作成されていないことを意味します。私は、tryおよびcatchブロックが含まれていないとき、私が得るので、私はこれを考える:私は最初のメソッドを作成していたときに

.\Planet.java:59: error: unreported exception FileNotFoundException; must be caught or declared to be thrown Scanner scnr = new Scanner(file); ^

は私もcatches FileNotFoundExceptionを試みたが、それは私に同じエラーを与えますすぐ上にあるように。

私はプログラムの値を設定することができますが、それは多くの不必要なコードを与え、むしろ非効率であると思います。

私の質問は、スキャナーにファイルから自分の値を読み取らせる方法です。

+1

スキャナはそれを外にtryブロックを定義するローカルスコープ内にあります。 –

+0

@LalitVermaもし私がtryブロックの中にスキャナを置かなければ、報告されない例外エラーが出ます。それはあなたの意味ですか? –

+0

シンボルが見つかりませんでしたscnr、あなたはそのスコープの外側にアクセスしています –

答えて

0

@Lalit Vermaが指摘したように、定義した変数はtry-catchブロック内にあります。

変更コードへ:

try{ 
    File file = new File("C:\\Users\\Lizi\\Documents\\Uni Work\\Year 2\\PHYS281\\Project\\test.txt"); 
    Scanner scnr = new Scanner(file); 
    int i = 0; 

    while(i<9 && scnr.hasNextLine()){ 
     //read values from file and set as Planet object, then set to array. 
     i++ 
    } 
    }catch(FileNotFoundException e){ 
    System.out.println("File not found!"); 
    } 
+0

パーフェクト、それはそれを修正!私はちょっと愚かだと感じました、それはそのような小さな誤りでした、ありがとう! –

+0

@LalitVerma私はあなたのコメントにしたが、タグ付けするのを忘れてしまった、今修正した:) –

関連する問題