2013年2月14日 星期四

Android取得資料夾內之檔案名稱

Android取得資料夾內之檔案名稱

工作上正在研究這部分的功能,紀錄一下心得。


參考資料如下:
利用File類存取檔案或目錄內容

利用上述參考資料來實作一個簡單範例如下:

功能為按下一個按鈕會顯示已指定路徑的資料夾中所含有之檔案名稱。

Layout如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ChooseFile" >

    <Button
        android:id="@+id/btnOpen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Open" />

    <TextView
        android:id="@+id/textFileName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

ChooseFile.java如下


package com.example.choosefile;

import java.io.File;
import java.io.FilenameFilter;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class ChooseFile extends Activity {

    private Button btnOpen;
    private TextView textFileName;
    private final static String BR=System.getProperty("line.separator");
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_choose_file);
        btnOpen=(Button) findViewById(R.id.btnOpen);
        textFileName=(TextView)findViewById(R.id.textFileName);
        btnOpen.setOnClickListener(btnOnClick);
        
    }

    protected OnClickListener btnOnClick=new OnClickListener(){
        public void onClick(View v){
            FilenameFilter namefilter =new FilenameFilter(){
                private String[] filter={
                        "bmp","gif","jpg","png"
                };
                @Override
                public boolean accept(File dir, String filename){
                    for(int i=0;i<filter.length;i++){
                        if(filename.indexOf(filter[i])!=-1)
                            return true;
                    }
                    return false;
                }
            };
            try{
                File filePath=new File(Environment.getExternalStorageDirectory()+"/");
                //String str=filePath.getName();取得檔案夾名稱
                //textFileName.setText(str);
                File[] fileList=filePath.listFiles(namefilter);
                CharSequence[] list =new CharSequence[fileList.length];
                for(int i=0;i<list.length;i++){
                    list[i]=fileList[i].getName();
                    textFileName.setText(textFileName.getText().toString()+list[i]+BR);
                }
            
            
            }catch(Exception e){
                
            }            
        }
    };
      


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_choose_file, menu);
        return true;
    }

}

筆記:
1. File("檔案路徑") 用來開啟指定之資料夾。
2. listFiles(filter)取得篩選過後的內容清單。
3. FilenameFilter實作filter。

2015/11/19追記:
1. 加入權限,取得SD卡內容
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2. 上述範例是要取得圖片檔,若要取得全部資料內容時,將
File[] fileList=filePath.listFiles(namefilter);
修改
File[] fileList=filePath.listFiles();





2 則留言:

  1. 請問大大是在哪指定路徑的!?

    回覆刪除
  2. 你好,
    onClick(View v) 中 File filePath=new File(Environment.getExternalStorageDirectory()+"/");
    這裡指定了外部儲存裝置(SD card)的路徑。

    回覆刪除