查看文件夹中的文件

时间:2015-08-19 16:38:35

标签: android android-file

我正在使用FileDialog来查看文件/浏览文件。我有一个导入功能,但我只能导入文件if there are not inside a folder.我的问题是FileDialog不显示文件夹中的文件。那么如何使用FileDialog查看文件夹中的文件?请帮忙

如何修改此代码以查看文件夹中的文件

package utils;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.List;

import utils.ListenerList.FireHandler;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Environment;
import android.util.Log;

public class FileDialog {

    private static final String PARENT_DIR = "..";
    private final String TAG = getClass().getName();
    private String[] fileList;
    private File currentPath;

    public interface FileSelectedListener {
        void fileSelected(File file);
    }

    public interface DirectorySelectedListener {
        void directorySelected(File directory);
    }

    private ListenerList<FileSelectedListener> fileListenerList = new ListenerList<FileDialog.FileSelectedListener>();
    private ListenerList<DirectorySelectedListener> dirListenerList = new ListenerList<FileDialog.DirectorySelectedListener>();
    private final Activity activity;
    private boolean selectDirectoryOption;
    private String fileEndsWith;    

/**
 * @param activity 
 * @param initialPath
 */
    public FileDialog(Activity activity, File path) {
        this.activity = activity;
        if (!path.exists()) path = Environment.getExternalStorageDirectory();
        loadFileList(path);
    }

/**
 * @return file dialog
 */
    public Dialog createFileDialog() {
        Dialog dialog = null;
        AlertDialog.Builder builder = new AlertDialog.Builder(activity);

        builder.setTitle(currentPath.getPath());
            if (selectDirectoryOption) {
                builder.setPositiveButton("Select directory", new OnClickListener() {

                    public void onClick(DialogInterface dialog, int which) {
                        Log.d(TAG, currentPath.getPath());
                        fireDirectorySelectedEvent(currentPath);
                    }
                });
            }

            builder.setItems(fileList, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                    String fileChosen = fileList[which];
                    File chosenFile = getChosenFile(fileChosen);

                        if (chosenFile.isDirectory()) {
                            loadFileList(chosenFile);
                            dialog.cancel();
                            dialog.dismiss();
                            showDialog();
                        } else fireFileSelectedEvent(chosenFile);
                }
            });
        dialog = builder.show();
        return dialog;
    }

    public void addFileListener(FileSelectedListener listener) {
        fileListenerList.add(listener);
    }

    public void removeFileListener(FileSelectedListener listener) {
        fileListenerList.remove(listener);
    }

    public void setSelectDirectoryOption(boolean selectDirectoryOption) {
        this.selectDirectoryOption = selectDirectoryOption;
    }

    public void addDirectoryListener(DirectorySelectedListener listener) {
        dirListenerList.add(listener);
    }

    public void removeDirectoryListener(DirectorySelectedListener listener) {
        dirListenerList.remove(listener);
    }

/**
 * Show file dialog
 */
    public void showDialog() {
        createFileDialog().show();
    }

    private void fireFileSelectedEvent(final File file) {

        fileListenerList.fireEvent(new FireHandler<FileDialog.FileSelectedListener>() {
            public void fireEvent(FileSelectedListener listener) {
                listener.fileSelected(file);
            }
        });
    }

    private void fireDirectorySelectedEvent(final File directory) {

        dirListenerList.fireEvent(new FireHandler<FileDialog.DirectorySelectedListener>() {
            public void fireEvent(DirectorySelectedListener listener) {
                listener.directorySelected(directory);
            }
        });
    }

    private void loadFileList(File path) {
        this.currentPath = path;
        List<String> r = new ArrayList<String>();

        if (path.exists()) {
            if (path.getParentFile() != null) r.add(PARENT_DIR);

                FilenameFilter filter = new FilenameFilter() {

                    public boolean accept(File dir, String filename) {
                        File sel = new File(dir, filename);

                        if (!sel.canRead()) return false;
                        if (selectDirectoryOption) return sel.isDirectory();
                        else {

                            boolean endsWith = fileEndsWith != null ? filename.toLowerCase().endsWith(fileEndsWith) : true;
                            return endsWith || sel.isDirectory();
                        }
                    }
                };

                String[] fileList1 = path.list(filter);

                for (String file : fileList1) {
                    r.add(file);
                }
        }
        fileList = (String[]) r.toArray(new String[]{});
    }

    private File getChosenFile(String fileChosen) {
        if (fileChosen.equals(PARENT_DIR)) return currentPath.getParentFile();
        else return new File(currentPath, fileChosen);
    }

//--------------------------------------------------------------
    public void setFileEndsWith(String fileEndsWith) {
        this.fileEndsWith = fileEndsWith != null ? fileEndsWith.toLowerCase() : fileEndsWith;
    }
}

class ListenerList<L> {
    private List<L> listenerList = new ArrayList<L>();

    public interface FireHandler<L> {
        void fireEvent(L listener);
    }

    public void add(L listener) {
        listenerList.add(listener);
    }

    public void fireEvent(FireHandler<L> fireHandler) {
        List<L> copy = new ArrayList<L>(listenerList);
        for (L l : copy) {
            fireHandler.fireEvent(l);
        }
    }

    public void remove(L listener) {
        listenerList.remove(listener);
    }

    public List<L> getListenerList() {
        return listenerList;
    }
}

这是第二类

public class MyCSVFileReader {
  public static void opendDialogToReadCSV(final Activity, final Context context) {

 File mPath= new File(Environment.getExternalStorageDirectory() + "//DIR//");

FileDialog fileDialog = new FileDialog(activitiy, mPath);
fileDialog.setFilesEndWith(".txt");

fileDialog.addFileListener(new FileDialog.FileSelectedListener() {

   @Override 
   public void fileSelected(File file) {
     new ImportCSV(context,activity,file).execute();
   }
});
fileDialog.showDialog();

}
}

1 个答案:

答案 0 :(得分:0)

如果您未指定FileDialog,则filesEndWith课程会显示所有文件夹和文件。

因此,只需删除行fileDialog.setFilesEndWith(".txt");即可显示文件夹中的所有文件。

使用当前代码,无法指定多个文件扩展名。