这是我用来在默认图片文件夹中创建文件夹的代码:
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
而崩溃了
请帮忙
谢谢
答案 0 :(得分:9)
您正在以错误的方式使用Environment.DIRECTORY_PICTURES
。它只是一个String
常量,如"Pictures"
,但不是路径。您需要通过Environment.getExternalStoragePublicDirectory(string)
File pictureFolder = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES
);
File imagesFolder = new File(pictureFolder, "images");
// etc
答案 1 :(得分:0)
要首先生成文件夹,您需要在 AndroidMinifest.xml
添加权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
现在调用以下方法创建一个新文件夹,其中包含要在其中创建文件夹的目录(此名称应存在于环境。列表中)和文件夹名称。
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);