2007年11月27日

Android覚え書き・ファイル入出力

adb pushで転送した音楽ファイルを再生することは可能、ということが分かったので、次は指定したディレクトリにあるファイルのリストを取得できるかどうかを調べてみた。

**********************
public class FirstPlayer extends Activity {
  private ArrayList mFileNameList;
	
  private void getFileNameList(String dirName, String extension) {
    File f = new File(dirName);
    if (!f.isDirectory()) {
      return;
    }
    File files[] = f.listFiles();
    for (int i = 0; i < files.length; i++) {
      if (files[i].getName().endsWith(extension)) {
        mFileNameList.add(files[i].getAbsolutePath());
      }
    }
  }
**********************

指定したディレクトリにある指定した拡張子のファイルをmFileNameListに詰め込むメソッド。ところが、/data以下のディレクトリを指定すると何も取得できない。f.listFiles()の結果がカラッポ。/tmpの下を指定すると問題なく動作する。

/tmpの下はエミュレータを再起動するたびに全部消えてしまうから、音楽ファイルの置き場所は/dataの下にしたい。ところが/dataの下に置くとファイルのリストを取得できない。これは困った。なんとかならないのか?

ついでファイルの書き込みも試してみた。

**********************
  try {
    File newfile = new File("/data/data/testfile1.txt");
    File newfile = new File("/tmp/testfile1.txt");
    newfile.createNewFile();
    FileWriter fw = new FileWriter(newfile);
    fw.write("Hello, world.");
    fw.close();
  } catch (IOException e) {
  }
**********************

Fileクラスのコンストラクタに/data以下のディレクトリを渡すとcreateNewFile()のところで例外が発生してしまう。/tmpの下なら問題ない。どうやら/dataの下で好き勝手なことはできないようだ。

追記:
/data以下だと書き込みが全くできないわけではない。adb pushで転送したファイルを書き換えることはできる。新しいファイルを作れないだけ。


kazhik at 21:07│Comments(2)TrackBack(1)Android 

トラックバックURL

この記事へのトラックバック

1. Google Android の開発に役立つ日本語ページ  [ [NOZAKI.COM] - edge of the future - ]   2007年11月29日 19:43
第7回OBIIミーティングのテーマとしてGoogleのAndroidを取り上げる事になったので、今日の時点で開発状況を公開してる方ってどの位いるのかなぁと思い、ちょっとぐぐってみました。Android...

この記事へのコメント

1. Posted by とおりす   2007年11月28日 14:57
Java だからどっかにポリシーファイルが在るんじゃないの?モバイル用は埋め込みかなぁ?
2. Posted by kazhik   2007年11月28日 22:29
Androidでのファイルの扱い方は一般のOSとは違っていて、各アプリケーションがファイルを抱え込むような形になっているようです。

http://code.google.com/android/devel/data.html

音楽ファイルはContent Providerを通して扱うことになっているようですが、残念ながら現時点ではドキュメントが何もありません。


この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔