通过uri获取文件绝对路径
private String getRealPath( Uri fileUrl ) {
String fileName = null;
if( fileUrl != null ) {
if( fileUrl.getScheme( ).toString( ).compareTo( "content" ) == 0 ) // content://开头的uri
{
Cursor cursor = this.getContentResolver( ).query( fileUrl, null, null, null, null );
if( cursor != null && cursor.moveToFirst( ) ) {
try {
int column_index = cursor.getColumnIndexOrThrow( MediaStore.Images.Media.DATA );
fileName = cursor.getString( column_index ); // 取出文件路径
} catch( IllegalArgumentException e ) {
e.printStackTrace();
}finally{
cursor.close( );
}
}
} else if( fileUrl.getScheme( ).compareTo( "file" ) == 0 ) // file:///开头的uri
{
fileName = fileUrl.getPath( );
}
}
return fileName;
}
获取文件名称
public static String getFileName(String filePath ) {
if (filePath == null) return null;
String fileName = null;
int cut = filePath.lastIndexOf('/');
if (cut != -1) {
fileName = filePath.substring(cut + 1);
}
return fileName;
}
复制文件
public String getFilePathFromURI(Context context, Uri contentUri) {
File rootDataDir = context.getFilesDir();
String filePath = getRealPath(contentUri);
String fileName = getFileName(filePath);//获取文件名称
if (!TextUtils.isEmpty(fileName)) {
File copyFile = new File(rootDataDir + File.separator + fileName);
copyFile(context, contentUri, copyFile);
return copyFile.getAbsolutePath();
}
return null;
}
public void copyFile(Context context, Uri srcUri, File dstFile) {
try {
InputStream inputStream = context.getContentResolver().openInputStream(srcUri);
if (inputStream == null) return;
OutputStream outputStream = new FileOutputStream(dstFile);
copyStream(inputStream, outputStream);
inputStream.close();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}