« アプリ第2弾開発中 | トップページ | 中華Padがやってきた »

2011年2月20日 (日)

手抜きなFileViewer

さっきネタがないと書いておきながら、まだ出してないネタがあったのを思い出しました。

Evernoteのアプリを作るにあたって、何でもかんでもEvernoteに処理させると時間がかかるので、代わりのアプリを作ってみました。お手軽なファイルビューワです。もっと高機能なものもあるのしょうが、いちいち開発環境に持っていくのは面倒なので。

中を見ていただければ分かるのですが、ファイルを読んで、TextViewに貼るだけのプログラムです。とりあえず、Javaネイティブなコードは書いたことがないのでこうやって入出力するのがお作法にあっているのか知らないのですが、ファイルから行単位に読んで、Stringにつなげていって、最後にTextViewに貼るのはあまりに冗長に感じたので読み込んだバッファからTextViewに突っ込みました。ただ、あまったバッファのデータを捨てないと改行が後ろについてしまうので、ファイルの長さでバッファをコピーしています。

なお、最初の8096バイト以降は読んでいません。どうせあんな小さい画面で何Kバイトもあるファイル読む気しないし。

おまけとして、最初の行に自分が呼ばれたIntentのactionを表示するようにしてあります。Intentを発行した側がACTION_EDITを出したのか、ACTION_VIEWで呼んだのか分かります。

当然ですが、他のアプリからIntentで呼ぶためのものなので、このアプリをランチャから呼んでもなにも起きません。ManufestのActivityにIntentFilterを指定してご利用ください。

public class fileView extends Activity {
      private final String TAG = "fileView" ;
      private FileInputStream fs ;
      
      /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView ah = (TextView) findViewById(R.id.action_header);
        TextView vw = (TextView) findViewById(R.id.textView1);
        Intent intent = getIntent();
        ah.setText(intent.getAction());   // set action in intent to view
      
        Uri fUri = intent.getData();
       if (fUri == null) return;         // no Uri. so, exit with do nothing
        String fname = fUri.getPath();
        File f = new File(fname);         // get filename from data in intent
      
       // setup buffer and view
       byte[] input = null ;
       int d = 0;
        String t = null;
            try {
                  fs = new FileInputStream(f);
                  BufferedInputStream bf = new BufferedInputStream(fs);
                  input = new byte[8096];
                  
            d = bf.read(input,0,8096);    // fill stream buffer (read first block only)
                  Log.d(TAG,"read returns "+String.valueOf(d));
                  byte[] tb = new byte[d];
                  for (int i=0;i<d ;i++) tb[i] = input[i] ;
                  t = new String(tb,"UTF-8");
              vw.setText(t);
            } catch (FileNotFoundException e) {
                  Log.e(TAG,"FileNotFound");
                  vw.setText("File Not Found");
//                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                  vw.setText("Unsupported Encoding");
//                e.printStackTrace();
            } catch (IOException e) {
                  Log.e(TAG,"IOException");
                  vw.setText("IO Error");
//                e.printStackTrace();
            }
    }
}

« アプリ第2弾開発中 | トップページ | 中華Padがやってきた »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/60027/50925727

この記事へのトラックバック一覧です: 手抜きなFileViewer:

« アプリ第2弾開発中 | トップページ | 中華Padがやってきた »