Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在内部存储器中创建目录_Android_File_Mkdirs - Fatal编程技术网

Android 在内部存储器中创建目录

Android 在内部存储器中创建目录,android,file,mkdirs,Android,File,Mkdirs,我认为我的智能手机是一部哑巴手机。 试图创建一个文件夹,但似乎无法创建。 我正在运行CyanogenMod,不知道这是否会让它发疯 这就是我一直在测试的: File folder = new File(getFilesDir() + "theFolder"); if(!folder.exists()){ folder.mkdir(); } 还有这个方法: File folder = getDir("theFolder",Context.MODE_PRIVATE); 您忘记在添加文件名之前添加

我认为我的智能手机是一部哑巴手机。
试图创建一个文件夹,但似乎无法创建。 我正在运行CyanogenMod,不知道这是否会让它发疯

这就是我一直在测试的:

File folder = new File(getFilesDir() + "theFolder");
if(!folder.exists()){
folder.mkdir();
}
还有这个方法:

File folder = getDir("theFolder",Context.MODE_PRIVATE);
您忘记在添加文件名之前添加“/”,因此您的路径编译如下:

/data/data/com.myPackageNametheFolder

File folder = new File(getFilesDir() + "/" + "theFolder");

File folder = new File(getFilesDir(),"theFolder");
你会得到这个

/data/data/com.myPackageName/offolder

File folder = new File(getFilesDir() + "/" + "theFolder");
附言:没有哑电话,所有的手机都是智能手机“坏傻瓜”

您忘记在添加文件名之前添加“/”,因此您的路径编译如下:

/data/data/com.myPackageNametheFolder

File folder = new File(getFilesDir() + "/" + "theFolder");

File folder = new File(getFilesDir(),"theFolder");
你会得到这个

/data/data/com.myPackageName/offolder

File folder = new File(getFilesDir() + "/" + "theFolder");
附言:没有哑电话,所有的手机都是智能手机“坏傻瓜”


这个答案很旧,我更新了它。我包括内部和外部存储。我会一步一步地解释

步骤1)您应该声明适当的
Manifest.xml
权限;对于我们的案例,这两个就足够了。此步骤还需要6.0之前和6.0之后的版本:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
步骤3)处理权限理由并显示对话框,请阅读评论以获取信息

/**
 * Requests given permission.
 * If the permission has been denied previously, a Dialog will prompt the user to grant the
 * permission, otherwise it is requested directly.
 */
protected void requestPermission(final String permission, String rationale, final int requestCode) {
    if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
        showAlertDialog("Permission required", rationale,
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        ActivityCompat.requestPermissions(BasePermissionActivity.this,
                                new String[]{permission}, requestCode);
                    }
                }, getString(android.R.string.ok), null, getString(android.R.string.cancel));
    } else {
        ActivityCompat.requestPermissions(this, new String[]{permission}, requestCode);
    }
}

/**
 * This method shows dialog with given title & content.
 * Also there is an option to pass onClickListener for positive & negative button.
 *
 * @param title                         - dialog title
 * @param message                       - dialog content
 * @param onPositiveButtonClickListener - listener for positive button
 * @param positiveText                  - positive button text
 * @param onNegativeButtonClickListener - listener for negative button
 * @param negativeText                  - negative button text
 */
protected void showAlertDialog(@Nullable String title, @Nullable String message,
                               @Nullable DialogInterface.OnClickListener onPositiveButtonClickListener,
                               @NonNull String positiveText,
                               @Nullable DialogInterface.OnClickListener onNegativeButtonClickListener,
                               @NonNull String negativeText) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(title);
    builder.setMessage(message);
    builder.setPositiveButton(positiveText, onPositiveButtonClickListener);
    builder.setNegativeButton(negativeText, onNegativeButtonClickListener);
    mAlertDialog = builder.show();
}
步骤4)在活动中获取权限结果:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case STORAGE_WRITE_PERMISSION_BITMAP_SHARE:
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                shareImage();
            }else if(grantResults[0]==PackageManager.PERMISSION_DENIED){
                //this toast is calling when user press cancel. You can also use this logic on alertdialog's cancel listener too.
                Toast.makeText(getApplicationContext(),"you denied permission but you need to give permission for sharing image. "),Toast.LENGTH_SHORT).show();
            }
            break;
        default:
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}
步骤5)如果使用内部存储器。您不需要检查使用内部存储的运行时权限

//this creates a png file in internal folder
//the directory is like : ......data/sketches/my_sketch_437657436.png
File mFileTemp = new File(getFilesDir() + File.separator
                + "sketches"
                , "my_sketch_"
                + System.currentTimeMillis() + ".png");
        mFileTemp.getParentFile().mkdirs();
有关运行时权限的信息,请阅读此页面:

我的建议:您可以创建一个
活动
,该活动负责此权限,如BasePermissionActivity,并在其中的步骤3声明方法。然后您可以扩展它,并在需要的地方调用您的请求权限


另外,我搜索了一下,找到了代码的Github链接@Step 3,以防您想检查:

这个答案很旧,我更新了它。我包括内部和外部存储。我会一步一步地解释

步骤1)您应该声明适当的
Manifest.xml
权限;对于我们的案例,这两个就足够了。此步骤还需要6.0之前和6.0之后的版本:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
步骤3)处理权限理由并显示对话框,请阅读评论以获取信息

/**
 * Requests given permission.
 * If the permission has been denied previously, a Dialog will prompt the user to grant the
 * permission, otherwise it is requested directly.
 */
protected void requestPermission(final String permission, String rationale, final int requestCode) {
    if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
        showAlertDialog("Permission required", rationale,
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        ActivityCompat.requestPermissions(BasePermissionActivity.this,
                                new String[]{permission}, requestCode);
                    }
                }, getString(android.R.string.ok), null, getString(android.R.string.cancel));
    } else {
        ActivityCompat.requestPermissions(this, new String[]{permission}, requestCode);
    }
}

/**
 * This method shows dialog with given title & content.
 * Also there is an option to pass onClickListener for positive & negative button.
 *
 * @param title                         - dialog title
 * @param message                       - dialog content
 * @param onPositiveButtonClickListener - listener for positive button
 * @param positiveText                  - positive button text
 * @param onNegativeButtonClickListener - listener for negative button
 * @param negativeText                  - negative button text
 */
protected void showAlertDialog(@Nullable String title, @Nullable String message,
                               @Nullable DialogInterface.OnClickListener onPositiveButtonClickListener,
                               @NonNull String positiveText,
                               @Nullable DialogInterface.OnClickListener onNegativeButtonClickListener,
                               @NonNull String negativeText) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(title);
    builder.setMessage(message);
    builder.setPositiveButton(positiveText, onPositiveButtonClickListener);
    builder.setNegativeButton(negativeText, onNegativeButtonClickListener);
    mAlertDialog = builder.show();
}
步骤4)在活动中获取权限结果:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case STORAGE_WRITE_PERMISSION_BITMAP_SHARE:
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                shareImage();
            }else if(grantResults[0]==PackageManager.PERMISSION_DENIED){
                //this toast is calling when user press cancel. You can also use this logic on alertdialog's cancel listener too.
                Toast.makeText(getApplicationContext(),"you denied permission but you need to give permission for sharing image. "),Toast.LENGTH_SHORT).show();
            }
            break;
        default:
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}
步骤5)如果使用内部存储器。您不需要检查使用内部存储的运行时权限

//this creates a png file in internal folder
//the directory is like : ......data/sketches/my_sketch_437657436.png
File mFileTemp = new File(getFilesDir() + File.separator
                + "sketches"
                , "my_sketch_"
                + System.currentTimeMillis() + ".png");
        mFileTemp.getParentFile().mkdirs();
有关运行时权限的信息,请阅读此页面:

我的建议:您可以创建一个
活动
,该活动负责此权限,如BasePermissionActivity,并在其中的步骤3声明方法。然后您可以扩展它,并在需要的地方调用您的请求权限



另外,我搜索了一下,找到了代码的Github链接@Step 3,以防您想检查:

“似乎无法创建它”--您如何确定这一点?当我查看文件资源管理器时,应用程序本身没有自己的文件夹,并且我的应用程序正在生成希望从此文件夹中获取的pdf,但它表示无法添加文件,因为它没有“当我查看文件资源管理器时”的前置任务--除非您的设备是根目录,您不能通过任何文件资源管理器查看设备上的内部存储。我的猜测是,你对Android SDK的术语和“它似乎不会被创建”感到困惑--您如何确定这一点?当我查看文件资源管理器时,应用程序本身没有自己的文件夹,并且我的应用程序正在生成希望从此文件夹中获取的pdf,但它表示无法添加文件,因为它没有“当我查看文件资源管理器时”的前置任务--除非您的设备是根目录,您不能通过任何文件资源管理器查看设备上的内部存储。我的猜测是,你对Android SDK的术语和。添加了“/”,我仍然没有得到任何名为“theFolder”的文件夹,但你看不到,它只能由你的应用程序读取。您可以通过记录
file.exists()
的结果来检查它。为了查看您的文件,您需要以编程方式将它们复制到外部存储。是的,我尝试过这样做。奇怪的是,我仍然没有看到任何可见的文件或文件夹。也在清单中添加了权限。这是我尝试使用外部存储,它在早期版本(kitkat)中工作,创建文件对象后,还需要调用
folder.mkdir()
。这将在/data/data/com.myPackageName/file/Have added“/”中创建文件夹,我仍然没有找到任何名为“theFolder”的文件夹,但您无法看到它,它只能由应用程序读取。您可以通过记录
file.exists()
的结果来检查它。为了查看您的文件,您需要以编程方式将它们复制到外部存储。是的,我尝试过这样做。奇怪的是,我仍然没有看到任何可见的文件或文件夹。也在清单中添加了权限。这是我尝试使用外部存储,它在早期版本(kitkat)中工作,创建文件对象后,还需要调用
folder.mkdir()
。这将在/data/data/com.myPackageName/file/Thank中创建文件夹。我会测试这个,告诉我结果,如果不起作用,我可以给你一些建议。@YIGA是的,但策略是一样的。我提到了清单权限和运行时权限,并展示了一段工作代码。只需一个小搜索,他就可以做任何他想做的事情。@Yirga我已经编辑了我的答案,包括对外部和内部存储的权限。请检查一下。如果你有问题,请告诉我。@YasinKaçmaz谢谢你,我非常感谢你的帮助!谢谢