创建一个不存在的文件夹,然后创建一个文件并共享

时间:2019-10-29 17:55:33

标签: android directory

我的共享选项有问题。 该选项工作得很好(我在尝试进行一些修改之前已保存了它),但是我尝试进行某些修改,但无法达到目标。

目的是:单击菜单中的选项,单击共享,如果“ MUSIC”文件夹中不存在“测试文件夹”文件夹,则创建它,如果已经存在,则复制声音,放入将其放在先前创建的文件夹中,然后将其用作SEND目的中的额外内容。

            case R.id.share:
            if (isStoragePermissionGranted()) {
                File outputFile = new File("");
                InputStream is = getResources().openRawResource(((Sound) adapter.getItem(index)).getMpsound());
                try {
                    File outputDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC), "Test folder");
                    outputFile = new File(outputDir, getResources().getResourceEntryName(((Sound) adapter.getItem(index)).getMpsound()) + ".mp3");

                    if (outputDir.exists()) {
                        byte[] buffer = new byte[is.available()];
                        is.read(buffer);
                        OutputStream os = new FileOutputStream(outputFile);
                        os.write(buffer);

                        Intent share = new Intent(Intent.ACTION_SEND);
                        share.setType("audio/*");
                        share.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".provider", outputFile));
                        share.putExtra(Intent.EXTRA_TEXT, "\"" + ((Sound) adapter.getItem(index)).getTitle_show() + "\" shared by my app");
                        startActivity(Intent.createChooser(share, "Share Sound File"));
                    } else {
                        outputDir.createNewFile(); //plus add code as below to share the sound after creating the folder
                    }

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

我无法创建该文件夹,如果我手动创建该文件夹,则代码运行良好,因为mp3出现在该文件夹中,并且在出现错误提示后:

java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/0/Music/my app/sound_test.mp3

所以...该应用程序能够访问该文件夹以创建声音,但是由于未知原因,我遇到了这个问题。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

因此,对于几天,几个月,几年内遇到相同问题的人:

正如CommonsWare所说,访问文件夹的问题来自FileProvider。用正确的路径正确配置它之后,我再也没有问题了。

对于与创建新文件夹有关的部分,.createNewFile()似乎不是正确的方法。必须使用.mkdir()

最后,有关删除文件夹中文件的部分,您将在那里找到答案:

File dir = new File(Environment.getExternalStorageDirectory()+"Dir_name_here"); 
if (dir.isDirectory()) 
{
    String[] children = dir.list();
    for (int i = 0; i < children.length; i++)
    {
       new File(dir, children[i]).delete();
    }
}

来源:How to delete all files in a directory java android app? Current code is deleting the that folder