0

让我解决这个问题;我是 java 的初学者,我研究了我需要的代码并尝试在我的应用程序中使用它时学习它。

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

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());
                        }
                    }
                }
            }
        }
    }
4

2 回答 2

2

记忆盒:如果您使用任何新设备或前。micromax funbook,然后它具有三个内存

  • /data/data/(手机内存)getFilesDirectory()
  • /mnt/sdcard/(手机的内部sdcard)Environment.getExternalStorageDirectory()
  • /mnt/extsd/(外部存储卡)/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;
}
于 2012-12-01T06:49:19.340 回答
1

这种方法很粗糙,但可以满足我的需要。搜索 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";
}
于 2012-12-07T05:23:04.677 回答