这两个文件都存在于SD卡上,但无论出于何种原因,exists()都会返回错误的png文件。
//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 exist");
}
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来完成方法吗?
如果是的话,
感谢。
答案 0 :(得分:12)
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是sdcard中的路径,而不是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
答案 1 :(得分:3)
请尝试此代码。希望它对你有所帮助。我只使用此代码。它的工作正常,我找到该文件是否存在。请尝试让我知道。
File file = new File(path);
if (!file.isFile()) {
Log.e("uploadFile", "Source File not exist :" + filePath);
}else{
Log.e("uploadFile","file exist");
}
答案 2 :(得分:2)
检查USB存储器是否未连接到PC。由于Android设备作为存储器连接到PC,因此文件不可用于应用程序,并且您对File.Exists()获得FALSE。
答案 3 :(得分:2)
内部存储中存在检查文件
示例:/storage/emulated/0/FOLDER_NAME/FILE_NAME.EXTENTION
检查权限(写入存储)
并且检查文件是否存在
public static boolean isFilePresent(String fileName) {
return getFilePath(fileName).isFile();
}
从文件名
获取文件 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;
}