Android 実機の /data の中は、エミュレータで見ることはできない。
デバッグのために、エクスプローラのように /data/data/パッケージ名/ の下が確認できたら良いのにと考えた。
そこで、File # listFiles() の結果で見に行くActivity を書いてみた。
import java.io.File;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
//
public class ExplorerActivity extends Activity{
// TARGET_PATH = 表示対象ディレクトリを Intent で受信するキー
public final static String TARGET_PATH = "targetDirPath";
private final static String KEY_ICON = "icon";
private final static String KEY_NAME = "filename";
private final static String KEY_PATH = "filepath";
private final static String KEY_ISDIRECTORY = "isDirectory";
private final static String KEY_DATETIME = "fileDate";
private final static String KEY_SIZE = "fileSize";
private final static SimpleDateFormat sdateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
private NumberFormat numberFormat;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setTitle("Explorer");
setContentView(R.layout.explorerlist);
// ファイルサイズ表示フォーマット
numberFormat = NumberFormat.getInstance();
numberFormat.setMaximumFractionDigits(3);
String targetPath = getIntent().getExtras().getString(TARGET_PATH);
final File file = new File(targetPath);
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
for(File f : file.listFiles()){
list.add(getItem(f));
}
// ボタン
ImageButton upbutton = (ImageButton)findViewById(R.id.upDirButton);
upbutton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
finish();
}
});
// パス表示
*1.setText(file.getAbsolutePath()+"/");
// リスト表示
ListView listview = (ListView)findViewById(R.id.explorerlistView);
listview.setAdapter(new SimpleAdapter(this,list,R.layout.explorerlist_row
,new String{KEY_ICON,KEY_NAME,KEY_DATETIME,KEY_SIZE}
,new int{R.id.folderOrFileImageView,R.id.fileNameTextView,R.id.fileDateTextView,R.id.fileSizeTextView}
));
listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent,View view,int position,long id){
ListView listView = (ListView)parent;
@SuppressWarnings("unchecked")
Map<String,Object> m = (Map<String,Object>)listView.getItemAtPosition(position);
Boolean isdirectory = (Boolean)m.get(KEY_ISDIRECTORY);
Intent intent = new Intent(ExplorerActivity.this,isdirectory ? ExplorerActivity.class : FileViewActivity.class);
intent.putExtra(TARGET_PATH,m.get(KEY_PATH).toString());
startActivity(intent);
}
});
}
private Map<String,Object> getItem(File file){
Map<String,Object> map = new HashMap<String,Object>();
map.put(KEY_ICON,file.isDirectory() ? R.drawable.foldericon : R.drawable.fileicon);
map.put(KEY_NAME,file.getName());
map.put(KEY_PATH,file.getPath());
if (file.isDirectory()){
map.put(KEY_DATETIME," ");
map.put(KEY_SIZE," ");
}else{
map.put(KEY_DATETIME,sdateFormat.format(file.lastModified()));
long size = file.length();
if (size > 1024000){
map.put(KEY_SIZE,numberFormat.format*2+" MB");
}else{
map.put(KEY_SIZE,numberFormat.format*3);
return map;
}
}
-------------------------------------------------
そして、ファイルの中を参照するもの、、、
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
//
public class FileViewActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setTitle("Explorer");
setContentView(R.layout.fileview);
String targetPath = getIntent().getExtras().getString(ExplorerActivity.TARGET_PATH);
File file = new File(targetPath);
// ボタン
ImageButton upbutton = (ImageButton)findViewById(R.id.upDirButton);
upbutton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
finish();
}
});
// パス表示
*4.setText(file.getAbsolutePath());
// file テキスト表示
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try{
FileInputStream inputStream = new FileInputStream(file);
int n;
while*5 != -1){
bos.write(n);
}
inputStream.close();
bos.close();
*6.setText(new String(bos.toByteArray()));
}catch(Exception e){
Log.e("sample",e.getMessage(),e);
}
}
}