Android 如果没有';不存在,然后创建一个文件并共享它

Android 如果没有';不存在,然后创建一个文件并共享它,android,directory,Android,Directory,我的共享选项有问题。 这个选项运行得非常好(在尝试一些修改之前我保存了它),但是我尝试了修改一些东西,但我无法达到我的目标) 其目的是:单击菜单中的选项,单击共享,如果“音乐”文件夹中不存在“测试文件夹”,则创建它,如果已经存在,则复制声音,将其放入先前创建的文件夹中,然后将其用作发送意图中的额外文件夹 case R.id.share: if (isStoragePermissionGranted()) { File

我的共享选项有问题。 这个选项运行得非常好(在尝试一些修改之前我保存了它),但是我尝试了修改一些东西,但我无法达到我的目标)

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

            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
所以。。。该应用程序可以访问文件夹来创建声音,但由于未知原因,我有这个问题


我做错了什么?

因此,对于那些在几天、几个月、几年后就要面临同样问题的人:

正如Commonware所说,访问文件夹的问题来自
文件提供程序
。在用正确的路径正确地配置它之后,我没有更多的问题

对于有关创建新文件夹的部分,
.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();
    }
}
File dir=新文件(Environment.getExternalStorageDirectory()+“dir\u name\u here”);
if(dir.isDirectory())
{
String[]children=dir.list();
for(int i=0;i

来源:

显然,您的
文件提供程序
元数据不包括
环境.getExternalStoragePublicDirectory(Environment.DIRECTORY\u MUSIC)
。谢谢。我有一段时间没有检查它,但你是对的,它指向另一个文件夹。。。所以现在,这部分工作正常了。不幸的是,如果文件夹不存在,应用程序不会创建它。它会在“音乐”文件夹中创建一个没有扩展名的文件。我们如何指定我想要一个文件夹?好的,找到了。我必须使用mkdir()而不是.createNewFile。谢谢你的帮助。