Can't check if file on sdcard exists

前端 未结 3 621
萌比男神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:27

    check this:

        File file = new File(Environment.getExternalStorageDirectory()+"/ping.xml");
        if(file.exists()){
            msgText.setText("Found");
        }
        else{
            msgText.setText("Not Found");
        }
    
    0 讨论(0)
  • 2020-12-04 01:30

    I think that problem is here:

    getBaseContext()
    

    where it is assigned to NULL. You really don't need this line. You can simply achieve your goal with

    String path = Environment.getExternalStorageDirectory().getPath() + "/ping.xml";
    File f = new File(path);
    if (f.exists()) {
       // do your stuff
    }
    else {
      // do your stuff
    }
    

    Update:

    If you or someone else have Samsung Galaxy S3, please follow @Raghunandan's answer because in this case getExternalStorageDirectory() returns internal memory.

    0 讨论(0)
  • 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.

    0 讨论(0)
提交回复
热议问题