2016-12-27 15 views
2

アセットフォルダ内にテキストファイルがあります。ディレクトリはmain/src/assets/socso.txtです。読み込むときに何が起こるのですか?エラーが発生します。私はテキストファイルに配置することを含む他の多くの質問を読んで、私はそれを正しく行ったと確信しています、そして、例のほとんどは、エラーが発生します。私がやろうとしているのは、スキャナを使ってテキストファイルからダブルデータ型を1語ずつ読み込むため、バッファ付きの読者を使用すべきではありません。私のコードの一部が使用されていた以下の通りです:アセットのテキストファイルから倍精度浮動小数点数を読み取る

InputStreamReader sc = new InputStreamReader(getAssets().open("socso.txt")); 
Vector v = new Vector(); 
Iterator i = v.iterator(); 
String llimit; 
while((llimit = sc.toString()) != null) 
{ 
    Socso s = new Socso(); 
    s.setLowerlimit(Double.parseDouble(llimit)); 
    s.setUpperlimit(Double.parseDouble(sc.toString())); 
    s.setEmployershares(Double.parseDouble(sc.toString())); 
    s.setEmployeeshares(Double.parseDouble(sc.toString())); 
    s.setType2(Double.parseDouble(sc.toString())); 

    v.add(s); 
} 

sc.close(); 
//when I run this, I can;t even run as error occur 

を別のバージョン

//InputStream is = resources.getAssets().open("socso.txt"); (When I use this it appears as error too) 
FileInputStream is = new FileInputStream(socso.txt); //(use this appear FileNotFoundException) 
Scanner sc = new Scanner(is); 
Vector v = new Vector(); 
Iterator i = v.iterator(); 
while(sc.hasNext()) 
{ 
    Socso s = new Socso(); 
    s.setLowerlimit(sc.nextDouble()); 
    s.setUpperlimit(sc.nextDouble()); 
    s.setEmployershares(sc.nextDouble()); 
    s.setEmployeeshares(sc.nextDouble()); 
    s.setType2(sc.nextDouble()); 

    v.add(s); 
} 

私はまた別の質問からAssetManagerをしようとしたが、エラーがあると答えは、ちょうど私の質問に答えませんでしたコンテキスト構文で発生し、私もそれを実行することはできません。

+0

フラグメントまたはアクティビティからこのコードを使用していますか? – EyadMhanna

+0

"資産フォルダ内にテキストファイルがあります" - そして、 'AssetManager'で' open( "socso.txt") 'を使います。アセットはデバイス上ではなく、開発マシン上のファイルなので、 'FileInputStream'は動作しません。また、 'InputStreamReader'の' toString() 'はストリームから何も返さないため、' llimit = sc.toString() 'は無意味です。それ以外にも、テキストファイルよりも最新のデータファイル形式(JSON、XMLなど)を使用することをおすすめします。 – CommonsWare

+0

Eyad Mhanna、実際はJavaクラス内のメソッドのコードの断片なので、それは動作ではないと思います。 –

答えて

3

あなたは断片からgetAssets()メソッドを呼び出すことはできません、あなたはそれらのファイルにアクセスするためにコンテキストを必要としています。したがって、あなたの問題を引き起こし行はエラー

InputStream is = getActivity().getResources.getAssets().open("socso.txt"); 

とを削除するには、このようにする必要があります

InputStreamReader sc = new InputStreamReader(getActivity().getAssets().open("socso.txt")); 

あなたが合格メソッドを作成し、Javaクラスでこれらの関数を呼び出したい場合それは断片にgetActivity()している間、それにタイプコンテキストのパラメータは、活動のコンテキストは、活動そのものであるので、この方法は次のようでなければならない:

public void readDoubleFromText(Context context) { 
    InputStreamReader sc = new InputStreamReader(context.getAssets().open("socso.txt")); 
//rest of function.... 
} 
+0

私は最初のコードに置き換えましたが、getActivity()部分を解決できないようですが、コードがJavaクラスのメソッドに表示されるからですか? –

+0

JAVAクラスのメソッド内で使用する場合は、そのメソッドに「コンテキスト」型のパラメータを渡し、getActivity()をそのパラメータに置き換える必要があります – EyadMhanna

+0

私の回答を更新します – EyadMhanna

関連する問題