android从下载目录获取文件名和路径

时间:2017-01-31 19:33:11

标签: android download path directory

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

 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 这很好用

请帮我解决这个问题

2 个答案:

答案 0 :(得分:1)

  

如果文件位于下载目录

之外,代码可以正常工作

不,它没有。如果Uri的方案恰好是file,它可以正常工作。大多数情况下,它将是content

  

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

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

答案 1 :(得分:0)

这是新代码:

    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();
    }

}