我想在下载文件夹中保留每天的日志文本文件。我想存储基于天的文本文件在我自己的日志文件夹(MyApp日志文件夹)在下载文件夹。
当我删除My App Log文件夹时,我无法在相同的位置以相同的名称创建此文件夹。同样,当我创建的文本文件被删除时,我不能创建具有相同文本文件名的文件。resolver.insert(downloadUri, contentValues);
总是返回null
尽管当我查询是否有文件属于该路径时得到null结果,但我不能创建相同的文件。
创建文件的函数:
public static void createFile(){
String contentType = "text/log";
Date cDate = new Date(System.currentTimeMillis());
String today = new SimpleDateFormat("yyyy_MM_dd").format(cDate);
long seconds = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, today + ".txt");//2021_10_13.txt
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, contentType);//text/log
contentValues.put(MediaStore.MediaColumns.DATE_ADDED, seconds);//System.currentTimeMillis
contentValues.put(MediaStore.MediaColumns.DATE_MODIFIED, seconds);//System.currentTimeMillis
contentValues.put(MediaStore.MediaColumns.IS_PENDING, 1);
contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS + File.separator + "MyApp Log");//Download/MyApp Log
ContentResolver resolver = getContext().getContentResolver();
outputUri = resolver.insert(getDownloadUri(), contentValues);
if (outputUri == null)
throw new IOException("Failed to create new MediaStore record.");
try (final OutputStream stream = resolver.openOutputStream(outputUri)) {
if (stream == null)
return;
} finally {
ContentValues updateValues = new ContentValues();
updateValues.put(MediaStore.MediaColumns.IS_PENDING, 0);
resolver.update(outputUri, updateValues, null, null);
}
}
public static @NonNull
Uri getDownloadUri() {
if (Build.VERSION.SDK_INT < 29) {
return getLegacyUri(Environment.DIRECTORY_DOWNLOADS);
} else {
return MediaStore.Downloads.EXTERNAL_CONTENT_URI;
}
}
查询文件是否存在的函数:
public static Uri getExternalContentUriFromFile(Uri externalUri, String filePath) {
if (externalUri == null)
return null;
try (Cursor cursor = getContentResolver().query(externalUri, new String[]{MediaStore.MediaColumns._ID},
MediaStore.MediaColumns.DATA + "=? ", new String[]{filePath}, null)) {
if (cursor != null && cursor.moveToFirst()) {
int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
return Uri.withAppendedPath(externalUri, "" + id);
}
return null;
}
}
我自己找到了解决办法:
int fileNo = 0;
Uri uri = saveToUri(fileName, contentType, seconds, relativePath);
if (uri == null) {
while (fileNo < 4 && uri == null) {
fileNo++;
fileName = AttachmentUtil.removeExtensionForName(fileName) + "(" + fileNo + ")" + extension;
uri = saveToUri(fileName, contentType, seconds, storageName + File.separator + myDirName, storageUri);
}
}
@Will V:
public static String removeExtensionForName(String fileName) {
int i = fileName.lastIndexOf('.');
if (i > 0) {
return fileName.substring(0, i);
}
return fileName;
}
和我得到我的代码在上面的问题到saveToUri函数。