Android 以编程方式创建目录?

Android 以编程方式创建目录?,android,directory,ringtone,Android,Directory,Ringtone,如何在android设备上的SD卡上创建文件夹? 我想当我点击设置为铃声创建文件夹,然后复制文件 同样,若文件夹存在,那个么只需复制文件即可。 到目前为止,我一直在使用这个 private final File rpath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES); private void s1ring() { Boolean success = fals

如何在android设备上的SD卡上创建文件夹? 我想当我点击设置为铃声创建文件夹,然后复制文件 同样,若文件夹存在,那个么只需复制文件即可。 到目前为止,我一直在使用这个

    private final File rpath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES);
 private void s1ring() {

    Boolean success = false;
                rsound = new File(rpath, "Summer melody.mp3");
                if (!rsound.exists()) {

                    try {
                        InputStream in = getResources().openRawResource(R.raw.s1beautiful);
                        FileOutputStream out = new FileOutputStream(rsound.getPath());
                        byte[] buff = new byte[1024];
                        int read = 0;

                        try {
                            while ((read = in.read(buff)) > 0) {
                                out.write(buff, 0, read);
                            }
                        } finally {
                            in.close();
                            out.close();
                        }
                    } catch (Exception e) {
                        success = false;                            
                    }
                } else {
                    success = true;
                    setRingtone();                      
                }
                if (!success) { 
                   setRingtone();
但后来我注意到了问题,在一些设备上,这些文件夹不存在,文件也没有被复制。 我怎样才能解决这个问题

日志:

03-24 12:19:12.331: W/dalvikvm(26957): threadid=1: thread exiting with uncaught exception (group=0x41c3b8b0)
03-24 12:19:12.331: E/AndroidRuntime(26957): FATAL EXCEPTION: main
03-24 12:19:12.331: E/AndroidRuntime(26957): java.lang.NullPointerException
03-24 12:19:12.331: E/AndroidRuntime(26957):    at gsoft.awesomeringtones.S01$1.setRingtone(S01.java:102)
03-24 12:19:12.331: E/AndroidRuntime(26957):    at gsoft.awesomeringtones.S01$1.s1ring(S01.java:89)
03-24 12:19:12.331: E/AndroidRuntime(26957):    at gsoft.awesomeringtones.S01$1.onClick(S01.java:48)
03-24 12:19:12.331: E/AndroidRuntime(26957):    at android.view.View.performClick(View.java:4421)
03-24 12:19:12.331: E/AndroidRuntime(26957):    at android.view.View$PerformClick.run(View.java:17903)
03-24 12:19:12.331: E/AndroidRuntime(26957):    at android.os.Handler.handleCallback(Handler.java:730)
03-24 12:19:12.331: E/AndroidRuntime(26957):    at android.os.Handler.dispatchMessage(Handler.java:92)
03-24 12:19:12.331: E/AndroidRuntime(26957):    at android.os.Looper.loop(Looper.java:213)
03-24 12:19:12.331: E/AndroidRuntime(26957):    at android.app.ActivityThread.main(ActivityThread.java:5225)
03-24 12:19:12.331: E/AndroidRuntime(26957):    at java.lang.reflect.Method.invokeNative(Native Method)
03-24 12:19:12.331: E/AndroidRuntime(26957):    at java.lang.reflect.Method.invoke(Method.java:525)
03-24 12:19:12.331: E/AndroidRuntime(26957):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
03-24 12:19:12.331: E/AndroidRuntime(26957):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
03-24 12:19:12.331: E/AndroidRuntime(26957):    at dalvik.system.NativeStart.main(Native Method)
更新

private File rsound;

private void setRingtone() {
                ContentValues values = new ContentValues();
                   values.put(MediaStore.MediaColumns.DATA, rsound.getAbsolutePath());
                   values.put(MediaStore.MediaColumns.TITLE, "Summer melody");
                   values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");
                   values.put(MediaStore.Audio.Media.ARTIST, " ");
                   values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
                   values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
                   values.put(MediaStore.Audio.Media.IS_ALARM, false);
                   values.put(MediaStore.Audio.Media.IS_MUSIC, true);

                   Uri uri = MediaStore.Audio.Media.getContentUriForPath(rsound.getAbsolutePath());
                   getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + rsound.getAbsolutePath() + "\"",
                           null);
                   Uri newUri = getContentResolver().insert(uri, values);

                   RingtoneManager.setActualDefaultRingtoneUri(
                           S01.this, RingtoneManager.TYPE_RINGTONE,
                           newUri);
                   Toast.makeText(getApplicationContext(), "Ringtone set successfully",
                           Toast.LENGTH_SHORT).show();

            }


            }
        );

要在SD卡中创建目录,请使用
mkdirs()
方法,如下所示

File dir = new File(Environment.getExternalStorageDirectory().getPath() + "/folderDir/");
dir.mkdirs();

要在SD卡中创建目录,请使用
mkdirs()
方法,如下所示

File dir = new File(Environment.getExternalStorageDirectory().getPath() + "/folderDir/");
dir.mkdirs();
尝试使用mkdirs()

并在清单中使用权限

          <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

尝试使用mkdirs()

并在清单中使用权限

          <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 


请访问请访问我尝试使用您的代码,但由于某些原因,它给了我错误。我添加了logcat哪个行是
S01.java
class的第102行?`ContentValues=newcontentvalues()`在android 10及更高版本的
环境中。getExternalStorageDirectory()
将无法创建目录。我尝试使用您的代码,但由于某些原因,它给了我错误。我添加了logcat哪个行是
S01.java
class的第102行?`ContentValues=newcontentvalues()`在android 10及以上版本的
环境中。getExternalStorageDirectory()
将无法创建目录。我也尝试了使用您的代码,但由于某些原因,它给了我错误。我在上面添加了logcat您的
setRingtone()
包含哪些内容?请显示它的代码@user3231871I我也尝试了你的代码,因为某些原因它给我错误。我在上面添加了logcat您的
setRingtone()
包含哪些内容?请显示其代码@user3231871