繁体   English   中英

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

[英]android Get file name and path from Download 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();

    }
}

如果文件位于下载目录之外,则代码可以正常工作,当我在其中获得的路径为数字形式而不是文件的实际名称时,例如:/ document / 2399,这给出了文件错误,而根目录的路径是:/storage/emulated/0/myDB.db3,这可以正常工作

请帮我解决这个问题

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

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

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

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

这是新代码:

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

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM