android通过mnt查找外部文件夹

时间:2012-12-01 06:33:34

标签: android

让我把它弄清楚;我是java的初学者,我研究了我需要的代码,并尝试在我的应用程序中使用它时学习它。

我目前陷入困境,不确定如何继续,非常感谢任何帮助。 我试图在/ mnt /文件夹中查找文件名中带有'ext'或'sd'的任何文件夹。这是我到目前为止,它得到一个空指针异常但我不知道什么变量是null。

public class MainActivity extends Activity
{
    static File[] dirs;
    @Override
    public void onCreate(Bundle savedInstanceState)
        {
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        findMnt("/mnt/");
        AlertDialog builder = new AlertDialog.Builder(this).setTitle("AppName").setMessage(dirs[0].getPath()).setNeutralButton("Close", null).show();
        AlertDialog builder2 = new AlertDialog.Builder(this).setTitle("AppName").setMessage(dirs[1].getPath()).setNeutralButton("Close", null).show();
}
    public static void findMnt(String path) {
        File file = new File(path);
        if(file.exists()){
            File[] list = file.listFiles();
            for(int i=0; i<list.length; i++) {
                if(list[i].isDirectory()) {
                    if(list[i].getPath().contains("sd") || list[i].getPath().contains("ext")){
                        for(int b=0; b<list.length; b++){
                            dirs[b] = new File(list[i].getPath());
                        }
                    }
                }
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

内存案例:如果您使用任何新设备或前任。 micromax funbook,那么它有三个记忆

  • / data / data /(手机内存)getFilesDirectory()
  • / mnt / sdcard /(手机的内部SD卡) Environment.getExternalStorageDirectory()
  • / mnt / extsd /(外部sdcard)/ mnt / extsd

您首先需要确定您的外部卡是/mnt/sdcard/还是/mnt/extSd,因为我创建了一个功能

/**
     * @return Number of bytes available on external storage extSD
     */
    public long getExternalAvailableSpaceInBytes() {
        long availableSpace = -1L;
        try {
            StatFs stat = new StatFs("mnt/extsd");
            System.out.println("ExternalAvailableSpace Path : "+mStringExernalSD);
            availableSpace = (long) stat.getAvailableBlocks() * (long) stat.getBlockSize();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return availableSpace;
    }

如果getExternalAvailableSpaceInBytes()返回0,则表示您需要考虑/mnt/sd

获取所有文件夹

ArrayList<File> mFiles= new ArrayList<File>();
    if(getExternalAvailableSpaceInBytes()>0)
             findMnt(mFiles, "/mnt/extsd");
    else
             findMnt(mFiles, "/mnt/sdcard");



public ArrayList<File> findMnt(ArrayList<File> files, File dir)
{

    if (!dir.isDirectory())
    {
        files.add(dir);
        return files;
    }

    for (File file : dir.listFiles())
        findMnt(files, file);
    return files;
}

答案 1 :(得分:0)

这种方法很粗糙,但可以满足我的需要。搜索sdcard文件夹,然后在名称中搜索名为ext的文件夹,如果失败,则在sdcard文件夹中搜索ext文件夹。

String sd = findSd("/mnt/") + "/";
                String ext = findExt("/mnt/") + "/";

            if(ext == "ext not found"){
                ext = findExt(sd + "/");
            }


public static String findSd(String path){
    File file = new File(path);
    if(file.exists()){
        File[] list = file.listFiles();
        for(int i=0; i<list.length; i++) {
            if(list[i].isDirectory()) {
                if(list[i].getPath().contains("sd")){
                    return list[i].getPath();
                }
            }
        }
    }
    return "sd not found";
}

public static String findExt(String path){
    File file = new File(path);
    if(file.exists()){
        File[] list = file.listFiles();
        for(int i=0; i<list.length; i++) {
            if(list[i].isDirectory()) {
                if(list[i].getPath().contains("ext") && list[i].getPath() != findSd("/mnt/")){
                    return list[i].getPath();
                }
            }
        }
    }
    return "ext not found";
}