Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 复制文件时出现TransactionTooLargeException_Java_Android_Copy Paste - Fatal编程技术网

Java 复制文件时出现TransactionTooLargeException

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 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转换为实路径的全部代码。它是为我工作的小尺寸文件。