Can't check if file on sdcard exists

前端 未结 3 626
萌比男神i
萌比男神i 2020-12-04 00:54

I\'m trying to make a simple check if the file exist. I saw similar questions here, but they didn\'t help. When I run my application, the app crashes and I got message \"Unf

3条回答
  •  盖世英雄少女心
    2020-12-04 01:34

    I have samsung galaxy s3 with android 4.1.2. My internal phone memory is named sdcard0 and my external card extSdCard.

    Environment.getExternalStorageDirectory()
    

    So the above returns the path of sdcard0 which is internal phone memory

    So get the actual path you can use the below

    String externalpath = new String();
    String internalpath = new String();
    
    public  void getExternalMounts() {
    Runtime runtime = Runtime.getRuntime();
    try
    {
    Process proc = runtime.exec("mount");
    InputStream is = proc.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    String line;
    
    BufferedReader br = new BufferedReader(isr);
    while ((line = br.readLine()) != null) {
        if (line.contains("secure")) continue;
        if (line.contains("asec")) continue;
    
        if (line.contains("fat")) {//external card
            String columns[] = line.split(" ");
            if (columns != null && columns.length > 1) {
                externalpath = externalpath.concat("*" + columns[1] + "\n");
            }
    } 
            else if (line.contains("fuse")) {//internal storage
            String columns[] = line.split(" ");
            if (columns != null && columns.length > 1) {
                internalpath = internalpath.concat(columns[1] + "\n");
            }
        }
    }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
      System.out.println("Path  of sd card external............"+externalpath);
      System.out.println("Path  of internal memory............"+internalpath);
    }
    

    Once you get the path

        File file = new File(internalpath+"/ping.xml");// internalpath or external path
        if(file.exists()){
            msgText.setText("Found");
        }
        else{
            msgText.setText("Not Found");
        }
    

    UPDATE :

    The above solution is not recommended. May not work well. Environment.getExternalStorageDirectory() will always return the path of External Storage. In most cases it is a Sdcard.

    From the docs

    public static File getExternalStorageDirectory ()

    Added in API level 1 Return the primary external storage directory. This directory may not currently be accessible if it has been mounted by the user on their computer, has been removed from the device, or some other problem has happened. You can determine its current state with getExternalStorageState().

    Note: don't be confused by the word "external" here. This directory can better be thought as media/shared storage. It is a filesystem that can hold a relatively large amount of data and that is shared across all applications (does not enforce permissions). Traditionally this is an SD card, but it may also be implemented as built-in storage in a device that is distinct from the protected internal storage and can be mounted as a filesystem on a computer.

提交回复
热议问题