android - file.exists()为现有文件返回false(对于不同于pdf的任何文件)

ss2ws0br  于 2023-06-28  发布在  Android
关注(0)|答案(4)|浏览(237)

这两个文件都存在于sd卡上,但无论出于何种原因,exists()都会为png文件返回false。

// String path = "/mnt/sdcard/Android/data/com.gemoro.toffer/cache/1551619351/0/foto/-921042926.png";
  String path = "/mnt/sdcard/Android/data/com.gemoro.toffer/cache/1551619351/0/foto/-1200240592.pdf";
            
File file2 = new File(path);
    
if (null != file2) {
    if (file2.exists()) {
        LOG.x("file exists");
    } else {
        LOG.x("file does not exist");
    }
}

现在,我已经看过了表达式file.exists()的底层是什么,它的作用是:

public boolean exists() {
    return doAccess(F_OK);
}
    
private boolean doAccess(int mode) {
    try {
        return Libcore.os.access(path, mode);
    } catch (ErrnoException errnoException) {
        return false;
    }
}

可能是方法结束时抛出异常并返回false?
如果是这样

  • 我该怎么做?
  • 什么其他选项来检查如果一个文件存在于这sd卡是可用的?

谢谢

unhi4e5o

unhi4e5o1#

1您需要获得设备的许可
将此添加到AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2获取外部存储目录

File sdDir = Environment.getExternalStorageDirectory();

3最后,检查文件

File file = new File(sdDir + filename /* what you want to load in SD card */);
if (!file.canRead()) {
    return false;
}
return true;

注意:filename是sd卡中的路径,不是root中的路径。

例如:你想找到

/mnt/sdcard/Android/data/com.gemoro.toffer/cache/1551619351/0/foto/-921042926.png

然后文件名是

./Android/data/com.gemoro.toffer/cache/1551619351/0/foto/-921042926.png

.

rqenqsqc

rqenqsqc2#

请尝试此代码。希望对你有帮助。我只使用这个代码。它的工作很好,我找到文件是否存在。请试着让我知道。

File file = new File(path);
    if (!file.isFile()) {
         Log.e("uploadFile", "Source File not exist :" + filePath);
    }else{
    Log.e("uploadFile","file exist");
}
kmynzznz

kmynzznz3#

检查USB存储是否未连接到PC。由于Android设备连接到PC作为存储的文件是不可用的应用程序和你得到FALSE到File.Exists().

huus2vyu

huus2vyu4#

检查文件是否存在于内部存储器中
示例:/storage/emulated/0/FOLDER_NAME/FILE_NAME.EXTENTION
1.检查权限(写入存储)
1.并检查文件是否存在
public static boolean isFilePresent(String fileName) { return getFilePath(fileName).isFile(); }
1.从文件名获取文件
public static File getFilePath(String fileName){ String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); File folder = new File(extStorageDirectory, "FOLDER_NAME"); File filePath = new File(folder + "/" + fileName); return filePath; }

相关问题