android Q(互換)uri絶対パス取得とuri取得取得ファイル
2352 ワード
まず、アクセス権を追加する必要があります.
//uri絶対パスString path=getFilePathFromURI(context,uri);
//uri取得ファイル(上記の方法を使用)File file=new File(getFilePathFromURI(context,uri));
public static String getFilePathFromURI(Context context, Uri contentUri) {
File rootDataDir = context.getExternalFilesDir(null);
// MyApplication.getMyContext().getExternalFilesDir(null).getPath();
String fileName = getFileName(contentUri);
if (!TextUtils.isEmpty(fileName)) {
File copyFile = new File(rootDataDir + File.separator + fileName);
copyFile(context, contentUri, copyFile);
return copyFile.getAbsolutePath();
}
return null;
}
public static String getFileName(Uri uri) {
if (uri == null) return null;
String fileName = null;
String path = uri.getPath();
int cut = path.lastIndexOf('/');
if (cut != -1) {
fileName = path.substring(cut + 1);
}
return fileName;
}
public static 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();
}
}
public static int copyStream(InputStream input, OutputStream output) throws Exception, IOException {
final int BUFFER_SIZE = 1024 * 2;
byte[] buffer = new byte[BUFFER_SIZE];
BufferedInputStream in = new BufferedInputStream(input, BUFFER_SIZE);
BufferedOutputStream out = new BufferedOutputStream(output, BUFFER_SIZE);
int count = 0, n = 0;
try {
while ((n = in.read(buffer, 0, BUFFER_SIZE)) != -1) {
out.write(buffer, 0, n);
count += n;
}
out.flush();
} finally {
try {
out.close();
} catch (IOException e) {
}
try {
in.close();
} catch (IOException e) {
}
}
return count;
}
//uri絶対パスString path=getFilePathFromURI(context,uri);
//uri取得ファイル(上記の方法を使用)File file=new File(getFilePathFromURI(context,uri));