안드로이드에서 파일을 탐색해야하는 경우에 쓸수 있는 예제 입니다.

 

list 를 추가해서 파일과 디렉토리를 탐색할 수 있습니다.

 

 

1. onCreate() 함수 : list view 와 각각 함수 초기화.

 

    static final String ROOT_PATH = "/sdcard";

    TextView mTextPath;
    ListView mListView;

    List<String> mItem;
    List<String> mPath;
    String installFilePath;

 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextPath = (TextView)findViewById(R.id.text_path);
        mListView = (ListView)findViewById(R.id.list_dir);
        mListView.setOnItemClickListener(mItemClickListener);

        mItem = new ArrayList<String>();
        mPath = new ArrayList<String>();
        installFilePath = null;

        getDir(ROOT_PATH);
    }

 

2. OnItemClickListener() 콜백 구현 : 리스트 아이템이 놀러졌을 경우 동작

    OnItemClickListener mItemClickListener = new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            File file = new File(mPath.get(position));

            if (file.isDirectory()) {
                if(file.canRead())
                    getDir(mPath.get(position));
                else{
                    new AlertDialog.Builder(MainActivity.this)
                        .setIcon(R.drawable.android_bot)
                        .setTitle("[ " + file.getName() + " ] folder can't be read.")
                        .setPositiveButton("OK", null)
                        .show();
                }
            }
            else{
                new AlertDialog.Builder(MainActivity.this)
                    .setIcon(R.drawable.android_bot)
                    .setTitle("[ " + file.getName() + " ] is a file.")
                    .setPositiveButton("OK", null)
                    .show();
            }           
        }
    };

 3. getDir() 함수 : 해당 디렉토리를 탐색해서 list 에 추가함.

 

    void getDir(String dirPath) {
        mTextPath.setText(dirPath);
        
        mItem.clear();
        mPath.clear();

        File f = new File(dirPath);
        File[] files = f.listFiles();

        if(!dirPath.equals(ROOT_PATH)) {
            mItem.add("../");
            mPath.add(f.getParent());
        }

        for(int i=0; i<files.length; i++) {
            File file = files[i];
            mPath.add(file.getPath());

            if(file.isDirectory())
                mItem.add(file.getName() + "/");
            else
                mItem.add(file.getName());
        }

        ArrayAdapter<String> fileList = new ArrayAdapter<String>(this, R.layout.list_row, mItem);
        mListView.setAdapter(fileList);
    }

 

디렉토리나 이름 순으로 정렬이 안되는 점이 야간 아쉽군요.

 

리스트에 대한 정렬 방법을 찾아봐야겠습니다.

 

ㅎㅎㅎ