2016-07-31 6 views
1

私はANTを初めて使用しており、Javaコード経由で読み込む必要のある静的ファイルを処理する際に問題があります。 SomeClass.javaでantビルドを使用してJavaで静的ファイルを読み取る

build 
    main 
    example 
     resository 
     SomeClass.class 
data 
    data.json 
src 
    example 
    repository 
     SomeClass.java 
test 

私はdata.jsonファイルを読む必要があるが、私は、パスを解決する際に、エラーを取得しています:私は、次のような構造を持っています。どういうわけかantに関連すると思います。

public class SomeClass { 
    class SomeClass extends ArrayList<Quote> {} 

    public Quote[] all() { 
    String path = "../../../data/data.json"; 
    Gson gson = new Gson(); 
    try { 
     BufferedReader br = new BufferedReader(new FileReader(path)); 
     return gson.fromJson(br, Quote[].class); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return new Quote[]{}; 
    } 
} 

私は、次のエラーを取得しています:

java.io.FileNotFoundException: 

それはbuildフォルダ内のファイルを置くアリが故に私もどこか私のファイルを置く必要があるかもしれません、私はあまりにもしかし、それを試してみましたので、私は思います私はもう少し助けが必要だと思う。

答えて

1

相対パスは、実行ディレクトリから相対的に計算されます。 プロジェクトルートにantを実行すると、 の相対パスはであり、../../../data/data.jsonではなくなります。エラーを「ファイルが見つかりません」取得

、 それは 、デバッガで、あるいは、例えば、print文を挿入することにより、いずれか、実行ディレクトリを確認するために良いことだ:

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

出力から、あなたはプロセスが実行されているディレクトリであるfaureとsquareを知って、 となり、正しい相対パスを計算することができます。

+0

私はこれを見つけるのに無駄な時間を覚えています。なぜjavaがこれを私にしなければならないのですか? – vivek

+0

もう1つのことは、生産時にすべてを1つのファイルに入れたいのですが、どうにか私のデータファイルをビルドフォルダに入れ、そこから参照することはできますか? – vivek

+1

これは、プログラムを実行するプロセスの実行ディレクトリによって異なります。 – janos

関連する問題