Androidアプリ制作において、何かしらファイルを配置しておいてそれをアプリで利用したい場合がある。
そんな時に便利なのがassetsフォルダだ。今回はこのassetsフォルダにファイルを配置して、プログラムから読み込みを行ってみよう。
1.新しいプロジェクトを作成したらまずassetsフォルダを作ろう。
appをオプションクリックしてNew->Folder->AssetsFolderを選択する。

2.Assetsフォルダはsrc/main/の直下に配置されなければならない。そこに置くか?というダイアログがでるのでチェックしてfinish

3.フォルダが配置されたことを確認

4.念のため、src/main/の直下に配置されたか確認してみよう。
プロジェクトビューにしてみると、確かに配置されていることがわかる(確認したらAndroidビューに戻して置く)

5.テキストエディタで適当なファイルを作成し配置してみよう。まずは以下のようなsample.txtをUTF-8で作成する。
●sample.txt
6.作成したらファイルをコピーしてassetsフォルダに配置する。

7.レイアウトファイルでデフォルトで配置されているTextViewにtvとidをつける。

8.以下のソースコード打ち込む
import android.content.res.AssetManager; |
import android.os.Bundle; |
import android.support.v7.app.AppCompatActivity; |
import android.widget.TextView; |
import java.io.BufferedReader; |
import java.io.IOException; |
import java.io.InputStream; |
import java.io.InputStreamReader; |
public class MainActivity extends AppCompatActivity { |
protected void onCreate(Bundle savedInstanceState) { |
super .onCreate(savedInstanceState); |
setContentView(R.layout.activity_main); |
TextView tv=(TextView)findViewById(R.id.tv); |
AssetManager am= this .getAssets(); |
InputStream is=am.open( "sample.txt" ); |
InputStreamReader isr= new InputStreamReader(is, "UTF-8" ); |
br= new BufferedReader(isr); |
StringBuilder sb= new StringBuilder(); |
while ((line = br.readLine()) != null ){ |
sb.append(System.getProperty( "line.separator" )); |
tv.setText(sb.toString()); |
} catch (IOException e) { |
} catch (IOException e) { |
9.以下のようにTextViewにファイルの内容が書き込まれる。

以上でassetsフォルダからファイルを読み込み処理は完了だ。
それでは、練習問題をやってみよう。
Q1
Java38日目でつくったsample2.csvファイルをassetsフォルダに配置し、リストビューに表示せよ。sample2.csvを未作成の人は下からダウンロードしてよい。
[実行例]

●Sales.java
05 | public Sales(String year, int salesA, int salesB){ |
11 | public String toString() { |
12 | return String.format( "%s年度の製品Aの売上高%d、製品Bの売上高%d" , this .year, this .salesA, this .salesB); |
14 | public String toCSV(){ |
15 | return this .year+ "," + this .salesA+ "," + this .salesB; |
●MainActivity.java
01 | import android.content.res.AssetManager; |
02 | import android.os.Bundle; |
03 | import android.support.v7.app.AppCompatActivity; |
04 | import android.widget.ArrayAdapter; |
05 | import android.widget.ListView; |
07 | import java.io.BufferedReader; |
08 | import java.io.IOException; |
09 | import java.io.InputStream; |
10 | import java.io.InputStreamReader; |
11 | import java.util.ArrayList; |
14 | public class MainActivity extends AppCompatActivity { |
17 | protected void onCreate(Bundle savedInstanceState) { |
18 | super .onCreate(savedInstanceState); |
19 | setContentView(R.layout.activity_main); |
20 | ListView lv=(ListView)findViewById(R.id.lv); |
21 | List<Sales> list= new ArrayList<>(); |
22 | ArrayAdapter<Sales> adapter= new ArrayAdapter<>( this ,android.R.layout.simple_list_item_1,list); |
23 | lv.setAdapter(adapter); |
24 | AssetManager am= this .getAssets(); |
25 | BufferedReader br= null ; |
27 | InputStream is=am.open( "sample2.csv" ); |
28 | InputStreamReader isr= new InputStreamReader(is, "UTF-8" ); |
29 | br= new BufferedReader(isr); |
31 | while ((line=br.readLine()) != null ){ |
32 | if (line.startsWith( "年度" )){ |
35 | String[] data=line.split( "," ); |
36 | list.add( new Sales(data[ 0 ],Integer.parseInt(data[ 1 ]),Integer.parseInt(data[ 2 ]))); |
39 | } catch (IOException e) { |
45 | } catch (IOException e) { |
50 | adapter.notifyDataSetChanged(); |
コメント