【问题标题】:android Get file name and path from Download directoryandroid 从下载目录获取文件名和路径
【发布时间】:2017-06-17 09:17:03
【问题描述】:

我正在尝试将文件从下载文件夹复制到另一个目录。 我用这段代码来获取文件路径

 int PICKFILE_RESULT_CODE=1;
        Intent chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
        chooseFile.setType("*/*");
        chooseFile = Intent.createChooser(chooseFile, "Choose a file");
        startActivityForResult( chooseFile,PICKFILE_RESULT_CODE);

我也用过

 @Override
public void onActivityResult(int requestCode, int resultCode,
                             Intent returnIntent) {
    // If the selection didn't work
    if (resultCode != RESULT_OK) {
        // Exit without doing anything else
        return;
    } else {
        returnUri = returnIntent.getData();
        String src = returnUri.getPath();
        Toast.makeText(this, src, Toast.LENGTH_SHORT).show();

    }
}

如果文件在下载目录之外,代码可以正常工作,当我得到的路径是数字形式而不是文件的实际名称时,例如: /文件/2399 这给出了找不到文件的错误 而来自根的路径是: /storage/emulated/0/myDB.db3 这很好用

请帮我解决这个问题

【问题讨论】:

    标签: android download path directory


    【解决方案1】:

    这是新代码:

        int PICKFILE_RESULT_CODE=1;
        Intent chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
        chooseFile.setType("*/*");
        chooseFile = Intent.createChooser(chooseFile, "Choose a file");
        startActivityForResult( chooseFile,PICKFILE_RESULT_CODE);
    

    并使用:

    @Override
    public void onActivityResult(int requestCode, int resultCode,
                                 Intent returnIntent) {
            InputStream is = null;
        // If the selection didn't work
        if (resultCode != RESULT_OK) {
            // Exit without doing anything else
            return;
        } else {
            // Get the file's content URI from the incoming Intent
            Uri returnUri = returnIntent.getData();
            try {
                is = getContentResolver().openInputStream(returnUri);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            try {
                BackUpHelper.importDB(is);
            } catch (IOException e) {
                e.printStackTrace();
            }
    
    
        }
    
    public static void importDB(InputStream is) throws IOException {
    
        OutputStream os = null;
    
        try {
        String currentDBPath =  DataBaseHelper2.DB_PATH+DataBaseHelper2.DB_NAME;
        File outPut = new File(currentDBPath);
    
            os = new FileOutputStream(outPut);
    
    
            byte[] buffer = new byte[1024];
    
    
    
            while (is.read(buffer) > 0) {
    
    
                os.write(buffer);
    
    
            }
            Toast.makeText(context, R.string.export_successful,
                    Toast.LENGTH_SHORT).show();
    
        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(context, R.string.export_failed, Toast.LENGTH_SHORT)
                    .show();
        }finally {
            os.flush();
            os.close();
            is.close();
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      如果文件在下载目录之外,代码可以正常工作

      不,它没有。如果Uri 的方案恰好是file,它工作正常。大多数时候,它会是content

      我正在尝试将文件从下载文件夹复制到另一个目录。

      ContentResolver 上使用openInputStream() 可在Uri 标识的内容上获得InputStream。这适用于filecontent 方案。然后,使用标准 Java I/O 将内容从 InputStream 复制到您想要的位置。

      【讨论】:

      • 任何示例如何做到这一点?
      • @NoorHossain: The other answer 有一些代码。 Thisthis 演示从 openInputStream() 读取,但不是复制部分。
      猜你喜欢
      • 1970-01-01
      • 2016-02-02
      • 2015-10-29
      • 2015-04-20
      • 1970-01-01
      • 2011-02-01
      • 2012-10-04
      • 2014-07-09
      • 2014-04-21
      相关资源
      最近更新 更多