【问题标题】:Copy file from one folder to another将文件从一个文件夹复制到另一个文件夹
【发布时间】:2019-05-31 21:43:49
【问题描述】:

我正在尝试在 Android 路径到来时复制该文件,但没有成功,尽管它已经作为 AndroidManifest 上的权限存在,就好像该文件不存在或在那里不知道一样。 下面是一段代码:

public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    switch (requestCode) {
        case FILE_SELECT_CODE:
            if (resultCode == RESULT_OK) {

                Uri uri = data.getData();
                String origem = uri.getPath();
                File src = new File(origem);
                if(src.isFile()){
                    Log.d(TAG,src.toString());
                }

                File root = Environment.getExternalStorageDirectory();
                root = new File(root.toString(), "Kcollector/importa/import.csv");

                try {
                    copy(src,root,true);
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
            break;
    }
    super.onActivityResult(requestCode, resultCode, data);
}

public static void copy(File origem, File destino, boolean overwrite) throws IOException{
    Date date = new Date();
    if (destino.exists() && !overwrite){
        System.err.println(destino.getName()+" já existe, ignorando...");
        return;
    }
    FileInputStream fisOrigem = new FileInputStream(origem);
    FileOutputStream fisDestino = new FileOutputStream(destino);
    FileChannel fcOrigem = fisOrigem.getChannel();
    FileChannel fcDestino = fisDestino.getChannel();
    fcOrigem.transferTo(0, fcOrigem.size(), fcDestino);
    fisOrigem.close();
    fisDestino.close();
    Long time = new Date().getTime() - date.getTime();
    System.out.println("Saiu copy"+time);
}

尝试复制时返回的错误:

W/System.err: java.io.FileNotFoundException: /external_storage/Kcollector/importa/kvendasajustado.csv(没有这样的文件或目录) W/System.err:在 java.io.FileInputStream.open0(本机方法)

【问题讨论】:

  • * 是一个英语网站。请用英语提问。
  • Log.d 行 (TAG, src.toString ());返回文件的路径:/external_storage/Kcollector/importa/kvendasajustado.csv
  • ¿Habla 使用过英格尔斯?你会说英语吗?
  • 对不起,我已经翻译了

标签: java android


【解决方案1】:

检查运行时权限或使用第一个response中指示的方法

public static void copy(File src, File dst) throws IOException {
    InputStream in = new FileInputStream(src);
    try {
        OutputStream out = new FileOutputStream(dst);
        try {
            // Transfer bytes from in to out
            byte[] buf = new byte[1024];
            int len;
            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
        } finally {
            out.close();
        }
    } finally {
        in.close();
    }
}

最后检查 url 是否形成良好。 否则你可以用断点调试(搜索这些词),并找到问题的确切来源

【讨论】:

  • 你有检查读写权限的方法吗?