0

重複の可能性:
Android ファイル ピッカー

選択したファイルの完全なファイル パスを返すファイル チューザーを Android アプリに含める必要があります。

しかし、これをどのように実装できるかわかりません。

Stackoverflow でこの質問をまだ探していますが、質問に対する明確な答えが見つかりません。

ギャラリーの画像から filePath を取得する方法を見つけましたが、他のすべてのファイル タイプの filePath を取得する方法については何もありません。

4

1 に答える 1

0
    private List<String> FindFiles(Boolean fullPath) {
        final List<String> tFileList = new ArrayList<String>();

        String[] fileTypes = new String[]{"dat","doc","apk"....}; // file extensions you're looking for
        FilenameFilter[] filter = new FilenameFilter[fileTypes .length];

        int i = 0;
        for (final String type : fileTypes ) {
            filter[i] = new FilenameFilter() {
                public boolean accept(File dir, String name) {
                    return name.endsWith("." + type);
                }
            };
            i++;
        }

        FileUtils fileUtils = new FileUtils();
        File[] allMatchingFiles = fileUtils.listFilesAsArray(
                new File("/sdcard"), filter, -1);
        for (File f : allMatchingFiles) {
            if (fullPath) {
                tFileList.add(f.getAbsolutePath());
            }
            else {
                tFileList.add(f.getName());
            }
        }
        return tFileList;
    }

    public class FileUtils {


        public File[] listFilesAsArray(File directory, FilenameFilter[] filter,
                int recurse) {
            Collection<File> files = listFiles(directory, filter, recurse);

            File[] arr = new File[files.size()];
            return files.toArray(arr);
        }

        public Collection<File> listFiles(File directory,
                FilenameFilter[] filter, int recurse) {

            Vector<File> files = new Vector<File>();

            File[] entries = directory.listFiles();

            if (entries != null) {
                for (File entry : entries) {
                    for (FilenameFilter filefilter : filter) {
                        if (filter == null
                                || filefilter
                                        .accept(directory, entry.getName())) {
                            files.add(entry);
                            Log.v("FileUtils", "Added: "
                                    + entry.getName());
                        }
                    }
                    if ((recurse <= -1) || (recurse > 0 && entry.isDirectory())) {
                        recurse--;
                        files.addAll(listFiles(entry, filter, recurse));
                        recurse++;
                    }
                }
            }
            return files;
        }
    }
于 2012-10-02T00:17:08.880 に答える