0

これを邪魔にならないようにしましょう。私はJavaの初心者です。必要なコードを調べて、アプリで使用しながら学習しようとしています。

私は現在行き詰まっていますが、どうすれば続行できるかわかりません。どんな助けでも大歓迎です。/ mnt /フォルダーで、ファイル名に「ext」または「sd」が含まれるフォルダーを探しています。これは私がこれまでに持っているものであり、nullポインター例外が発生しますが、どの変数が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());
                        }
                    }
                }
            }
        }
    }
4

2 に答える 2

2

メモリケース:新しいデバイスを使用する場合、または例:micromax funbook、それから3つのメモリを持っています

  • / data / data /(電話の内部メモリ)getFilesDirectory()
  • / mnt / sdcard /(電話の内部SDカード)Environment.getExternalStorageDirectory()
  • / mnt / extsd /(外部SDカード)/ 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 に答える