2017-08-24 18 views
0

私はassetsフォルダの下のファイルを読みたいと思いますし、私のファイルからMain_Activityクラスの戻り値としてテキストを取得したいと思います。ここに私のコードです。アクティビティクラスを拡張せずにjavaクラス内のassetsフォルダからファイルを読み取る方法は?

Main.java

これは、メインクラスのメソッドです。

ReadFile.java

このfileReaing()方法がReadFile.javaです。

public String fileReading() throws IOException { 
    StringBuilder sb = new StringBuilder();  
    AssetManager am = getAssets(); 
    InputStream is = am.open("a.txt"); 
    BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
    String line = null; 

    while ((line = br.readLine()) != null) { 
     sb.append(line + "\n"); 
    } 
    return sb.toString(); 
} 
} 

このコードを実行した後、次のエラーが見つかりました。

Process: com.csh.readfile, PID: 4379 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.csh.readfile/com.csh.readfile.Main}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.AssetManager android.content. 
Context.getAssets()' on a null object reference 

このエラーを解決するのを手伝ってください。私はアンドロイドの初心者であり、前もってすべてに感謝しています。

1)にコンテキストを渡します

+0

をコンテキストを渡します? –

+0

@SnehalGongle、いいえ、私は別のjava calssのファイルを読んでみたいと思いますし、戻り値としてファイルからテキストを取得したいと思います。私はどうしたらいいですか? –

+0

あなたは@omar restで答えを参照することができます。コンテキストの代わりにgetApplicationContext()を使うことをお勧めします。 –

答えて

0

問題は、あなたがして

ReadFile f= new ReadFile(); 
    try { 
     str = f.fileReading(getApplicationContext()); 
    } 

以下

public String fileReading(Context c) throws IOException { 
    StringBuilder sb = new StringBuilder();  
    AssetManager am = c.getAssets(); 
    InputStream is = am.open("a.txt"); 
    ..... 
    ..... 
} 
+0

私はそれを手に入れました。これは私には便利です。本当にありがとう、本当にありがとう。 –

+0

これで問題が解決した場合は、回答を受け入れることを検討してください。)........ –

0

2つの可能性のように、ReadFile.javafileReading()方法にcontextに合格しようとしなかったですあなたの方法。

public String fileReading(Context ctx) throws IOException { 
StringBuilder sb = new StringBuilder(); 
AssetManager am = ctx.getAssets(); 
InputStream is = am.open("a.txt"); 
BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
String line = null; 
while ((line = br.readLine()) != null) { 
sb.append(line + "\n"); 
} 
return sb.toString(); 
} 

2)は、OnCreateの "この" キーワードでコンテキストを初期化してきたあなたのコンストラクタに

public class ReadFile{ 
private Context ctx; 

public ReadFile(Context ctx){ 
this.ctx = ctx: 
} 

public String fileReading() throws IOException { 
StringBuilder sb = new StringBuilder(); 
AssetManager am = ctx.getAssets(); 
InputStream is = am.open("a.txt"); 
BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
String line = null; 
while ((line = br.readLine()) != null) { 
sb.append(line + "\n"); 
} 
return sb.toString(); 
} 
} 
+0

はい、ありがとうございました。別の方法として私にとっても役に立ちます。本当にありがとう。 –

+0

助けがあれば、回答を受け入れるか、投票することを検討してください。 –

+0

投票方法、サー –

関連する問題