[解決済み】アセットからファイルを読み込む
質問
public class Utils {
public static List<Message> getMessages() {
//File file = new File("file:///android_asset/helloworld.txt");
AssetManager assetManager = getAssets();
InputStream ims = assetManager.open("helloworld.txt");
}
}
私はこのコードを使って、アセットからファイルを読み込もうとしています。私はこれを行うために2つの方法を試してみました。まず
File
を受け取りました。
FileNotFoundException
を使用した場合
AssetManager getAssets()
メソッドが認識されません。
何か解決策はないでしょうか?
どのように解決するのですか?
以下は、バッファードリーディングのためのアクティビティで私が行っていることです。
BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(getAssets().open("filename.txt")));
// do reading, usually loop until end of file reading
String mLine;
while ((mLine = reader.readLine()) != null) {
//process line
...
}
} catch (IOException e) {
//log the exception
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
//log the exception
}
}
}
EDIT : もしあなたの質問がアクティビティの外でそれを行う方法であるなら、私の回答はおそらく役に立たないでしょう。もし、あなたの質問が単にアセットからファイルを読み取る方法であれば、答えは上記の通りです。
アップデイト :
タイプを指定してファイルを開くには、以下のようにInputStreamReaderの呼び出しにタイプを追加するだけです。
BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(getAssets().open("filename.txt"), "UTF-8"));
// do reading, usually loop until end of file reading
String mLine;
while ((mLine = reader.readLine()) != null) {
//process line
...
}
} catch (IOException e) {
//log the exception
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
//log the exception
}
}
}
EDIT
コメントで@Stanさんがおっしゃっているように、私があげているコードは行の合計が取れていないようです。
mLine
はパスごとに置き換えています。だから、私は
//process line
. このファイルには何らかのデータ(例えば連絡先リスト)が含まれており、各行は別々に処理されるべきだと推測しています。
何も処理せずに単純にファイルを読み込みたい場合は、以下のようにまとめる必要があります。
mLine
を使用して、各パスで
StringBuilder()
を作成し、各パスを追記する。
その他の編集
Vincent さんのコメントに従って、私は
finally
ブロックを作成します。
また、Java 7 以降では
try-with-resources
を使用することで
AutoCloseable
と
Closeable
は、最近のJavaの特徴である。
CONTEXT
コメントで@LunarWatcherさんが指摘しているのは
getAssets()
は
class
で
context
. ですから、もしあなたが
activity
を参照し、コンテキストインスタンスをアクティビティに渡す必要があります。
ContextInstance.getAssets();
これは@Maneeshさんの回答で説明されています。というわけで、もしこれが役に立つのであれば、彼の回答をアップヴォートしてください。
関連
-
Androidのadbデバイスがオフラインであることが判明
-
cygwinのダウンロード、インストールチュートリアル、およびCDTの「makeプログラムがパスに見つからない」バグの解消
-
Androidで発生した問題、解決策とヒント
-
ライブラリをモジュールとしてインポートする際にエラーが発生しました。Error:A problem occurred configuring project ':library'.
-
Androidプロセス生存のためのソリューション
-
アプリの実行エラー。ターゲットデバイスが見つからない問題
-
Android Studio常见错误之:Rendering Problems/The following classes could not be instantiated
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] アプリケーションからAndroidのWebブラウザでURLを開くにはどうすればよいですか?
-
[解決済み] APKファイルからソースコードを取得する方法はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
adb devices OffLine Solution(オフラインソリューション
-
AndroidでAttempt to invoke virtual method... on null object referenceの例外が発生する。
-
プログラム "git.exe "を実行できない場合の正しい解決方法です。CreateProcessエラー=2
-
GIF、Lottie、SVGA
-
IllegalStateException。ArrayAdapter は、リソース ID が TextView である必要があります。
-
Error:A problem occurred configuring project ':app'. > ビルドを見つけられませんでした。
-
Android カスタムスピナーコントロールのドロップダウン・ボックスの実装
-
Android Bluetooth 開発の基本プロセス
-
超シンプルなアンドロイドのタイムディレイ機能
-
AndroidStudioのショートカット 検索/置換