我正在实现在我的应用程序中保存文件的功能,该文件由一些外部应用程序发送。
我提供了对单个和多个文件的支持。为所有类型的文件提供处理。
但我无法处理以下情况。
我从电子邮件客户端查看文件 - >在QuickOffice中查看 - >点击发送 - >选择我的应用 - >然后点击保存在我的应用中。
因为我得到了包含在异常
中的以下路径java.io.FileNotFoundException: /file:/data/data/com.qo.android.sp.oem/files/temp/Error.log: open failed: ENOENT (No such file or directory)
我看过这篇文章对于处理具有内容方案的uri非常有用 Get filename and path from URI from mediastore
以下是我的代码
Uri uri = (Uri) iterator.next();
if ("content".equals(uri.getScheme())) {
filePath = getFilePathFromContentUri(uri, hostAcitvity.getContentResolver());
}
else {
filePath = uri.getPath();
}
fileName = uri.getLastPathSegment();
fileSize = hostAcitvity.getContentResolver().openInputStream(uri).available();
getFilePathFromContentUri的代码
private String getFilePathFromContentUri(Uri selectedVideoUri, ContentResolver contentResolver)
{
String filePath;
String[] filePathColumn = { MediaColumns.DATA };
Cursor cursor = contentResolver.query(selectedVideoUri, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
filePath = cursor.getString(columnIndex);
cursor.close();
return filePath;
}
然后我将路径包装在FileInputStream中,这会引发上述异常 无法正确解析文件路径。这是找到路径的正确方法吗?
欢呼声, Saurav
答案 0 :(得分:0)
我看过这篇文章对于处理具有内容方案的uri非常有用
从未如此可靠地工作,将来的工作效率会更低。
这是找到路径的正确方法吗?
不,因为不要求每个Uri
映射到您可以访问的文件系统上的路径。
使用getInputStream()
上的ContentResolver
获取InputStream
上的Uri
,然后使用该数据。