将音频从uri复制到特定目录

时间:2017-09-15 13:57:55

标签: android file android-file

我从用户的图书馆得到一首歌:

Intent selectIntent = new Intent(Intent.ACTION_GET_CONTENT);
            selectIntent.setType("audio/*");
            startActivityForResult(selectIntent, SONG_REQUEST_CODE);

并像这样检索它:

 @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == SONG_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
            if ((data != null) && (data.getData()!=null)) {
                song = data.getData(); //song is an Uri defined previuosly
            }
        }
    }

我需要将它导入我定义并创建的文件夹中:

final File dir2 = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Chords/Imported Audio");
dir2.mkdirs();

我按照Commonsware的建议尝试了这个,但文件没有创建:

private void importAudio(Uri uri) {
    String source = uri.getPath();
    String destinationFile = dir2 + File.separator + songName;

    BufferedInputStream bis = null;
    BufferedOutputStream bos = null;

    try {
        bis = new BufferedInputStream(new FileInputStream(source));
        bos = new BufferedOutputStream(new FileOutputStream(destinationFile, false));

        byte[] buf = new byte[1024];
        bis.read(buf);
        do {
            bos.write(buf);
        } while (bis.read(buf) != -1);

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (bis != null) bis.close();
            if (bos != null) bos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

该文件不在那里。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

  

虽然文件不在那里

最有可能的是,你在LogCat中有一个堆栈跟踪。 song.getPath()不太可能有用。 song可能没有file方案,因此getPath()毫无意义。

使用ContentResolveropenInputStream()InputStream上获取song,然后使用InputStream复制内容。

此外: