5

这是我用来在默认图片文件夹中创建文件夹的代码:

File imagesFolder = new File(Environment.DIRECTORY_PICTURES, "/images");
if (!imagesFolder.exists()) {
Log.d("if imagesFolder exists - 1", "False");
imagesFolder.mkdirs();
} else {
Log.d("if imagesFolder exists - 1", "True");
}
if (!imagesFolder.exists()) {
Log.d("if imagesFolder exists - 2", "False");
imagesFolder.mkdirs();
} else {
Log.d("if imagesFolder exists - 2", "True");
}

在日志中我得到:

False

False

第一次该目录不存在,因此False但随后我立即使用创建它mkdirs(),因此我希望第二个日志是True但即使是这样,我的应用程序由于代码的后面部分而False崩溃NullPointerException

请帮忙

谢谢你

4

2 回答 2

11

你用Environment.DIRECTORY_PICTURES错了方法。它只是一个String常数, "Pictures"但不是路径。您需要通过以下方式获取路径Environment.getExternalStoragePublicDirectory(string)

File pictureFolder = Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES
        );
File imagesFolder = new File(pictureFolder, "images");
// etc
于 2012-09-26T09:44:24.620 回答
1

首先要生成一个文件夹,你需要在AndroidMinifest.xml添加权限

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

现在调用以下方法创建一个新文件夹,您要在其中创建文件夹(此名称应存在于 Environment.list 中)和您的文件夹名称。

File outputDirectory = GetPhotoDirectory(Environment.DIRECTORY_PICTURES, "YourFolder");

通过这种方法生成你的文件夹

public static File GetDirectory(String inWhichFolder, String yourFolderName ) {
    File outputDirectory = null;

    String externalStorageState = Environment.getExternalStorageState();
    if (externalStorageState.equals(Environment.MEDIA_MOUNTED)) {

        File pictureDirectory = Environment.getExternalStoragePublicDirectory(inWhichFolder);

        outputDirectory = new File(pictureDirectory, yourFolderName);
        if (!outputDirectory.exists()) {
            if (!outputDirectory.mkdirs()) {
                Log.e(LogHelper.LogTag, "Failed to create directory: " + outputDirectory.getAbsolutePath());
                outputDirectory = null;
            }
        }
    }
    return outputDirectory;
}

如果要在新创建的文件夹下创建文件,则可以使用以下代码

public static Uri GenerateTimeStampPhotoFileUri(File outputDirectory, String fileName){
    Uri photoFileUri = null;

    if(outputDirectory!=null) {
        File photoFile = new File(outputDirectory, fileName);
        photoFileUri = Uri.fromFile(photoFile);
    }
    return photoFileUri;
}

使用文件目录创建文件夹后调用以创建文件。它将返回您的文件Uri

Uri fileUri = GenerateTimeStampPhotoFileUri(outputDirectory, fileName);
于 2017-03-12T05:03:04.830 回答