Java 复制文件时出现TransactionTooLargeException
我的目标是浏览并复制文件,然后将其粘贴到其他文件夹中 如下图所示,我使用了Intent来浏览文件Java 复制文件时出现TransactionTooLargeException,java,android,copy-paste,Java,Android,Copy Paste,我的目标是浏览并复制文件,然后将其粘贴到其他文件夹中 如下图所示,我使用了Intent来浏览文件 Intent intent = new Intent(); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("*/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult
Intent intent = new Intent();
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "DEMO"), 1001);
public void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1001) {
Uri currFile = data.getData();
}
}
public static String getPath(Context cx,Uri uri) {
String filePath = "";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ){
String wholeid = DocumentsContract.getDocumentId(uri);
String id = wholeid.split(":")[1];
String[] column = {MediaStore.Images.Media.DATA};
String sel = MediaStore.Images.Media._ID + "=?";
Cursor cursor = cx.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, column, sel, new String[]{id}, null);
int columnIndex = cursor.getColumnIndex(column[0]);
if (cursor.moveToFirst()) {
filePath = cursor.getString(columnIndex);
}
cursor.close();
}else{
String[] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = cx.getContentResolver().query(uri, null, null, null, null);
if (cursor == null) {
return uri.getPath();
} else {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
filePath = cursor.getString(idx);
}
}
return filePath;
}
现在我想复制文件,因为我必须从URI获取文件的真实路径。
(我正在将文件实际路径传递给java FileInputStream)
要将Uri转换为实际路径,我执行了如下操作
Intent intent = new Intent();
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "DEMO"), 1001);
public void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1001) {
Uri currFile = data.getData();
}
}
public static String getPath(Context cx,Uri uri) {
String filePath = "";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ){
String wholeid = DocumentsContract.getDocumentId(uri);
String id = wholeid.split(":")[1];
String[] column = {MediaStore.Images.Media.DATA};
String sel = MediaStore.Images.Media._ID + "=?";
Cursor cursor = cx.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, column, sel, new String[]{id}, null);
int columnIndex = cursor.getColumnIndex(column[0]);
if (cursor.moveToFirst()) {
filePath = cursor.getString(columnIndex);
}
cursor.close();
}else{
String[] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = cx.getContentResolver().query(uri, null, null, null, null);
if (cursor == null) {
return uri.getPath();
} else {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
filePath = cursor.getString(idx);
}
}
return filePath;
}
如果文件超过10kb,则会给出TransactionTooLargeException
我的问题是如何浏览和复制文件并粘贴到文件夹中,而不获取TransactionTooLargeException
有什么好方法可以做到这一点吗 “要将Uri转换为实际路径,我做了如下所示”——这对大多数Android设备不起作用。“如果文件超过10kb,则表示TransactionTooLargeException”--请发布整个堆栈跟踪。@Commonware我发布了用于将uri转换为实路径的全部代码。它是为我工作的小尺寸文件。