Android oldFile.renameTo(newFile) 无法在较低 Android 上工作

Android oldFile.renameTo(newFile) not working on lower Android

各位开发者大家好。我在这里阅读了很多,但找不到解决我问题的方法。

我有一个来自 Camera Intent 的图像文件需要重命名。 重要提示:它适用于 Android 8.1,但经测试不适用于 5.1.1。

不知道为什么,我离那个捣蛋鬼更近了。它是 renameTo(),它什么都不做,或者至少我不知道它做了什么。 这是代码的一部分:

imgFinalName = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
            format + ";" + lkwNr + ";" + telefonNr + ".jpg");
    if (imageFile.exists()){
        Log.d("Mati","Old File exists");
    }else{
        Log.d("Mati","Old File doesn't exist");
    }
    imageFile.renameTo(imgFinalName);
    Log.d("Mati","New Filename: " + imgFinalName.getName());
    Log.d("Mati","Path: " + imgFinalName.getAbsolutePath());
    if (imageFile.exists()){
        Log.d("Mati","Old File exists");
    }else{
        Log.d("Mati","Old File doesn't exist");
    }
    if (imgFinalName.exists()){
        Log.d("Mati","New File exists");
    }else{
        Log.d("Mati","New File doesn't exist");
    }

Log结果如下:

存在旧文件

新文件名:2017-12-04_21:39:03;235;123123.jpg

路径:/storage/sdcard/Pictures/2017-12-04_21:39:03;235;123123.jpg

存在旧文件

新文件不存在

所以正如你所见,旧文件存在,然后我调用 renameTo 方法,旧文件仍然存在,新文件不存在。

正如我所说,它适用于 Android 8.1,但不适用于 5.1.1,我真的不知道为什么...如果你们有解决方案就好了。欢迎提问

正当我关掉 Android Studio 想睡觉的时候,我想到了 SimpleDateFormat。

如您在文件名中所见,它的:

SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
String format = s.format(new Date());

我现在改成:

SimpleDateFormat s = new SimpleDateFormat("yyyyMMddHHmmss");
String format = s.format(new Date());

并且有效。请注意,“-”、“_”和“:”在 android 8.1 中有效。 我猜这些选项是将来添加的。无论如何,多么愚蠢的错误,但很高兴我发现了它。抱歉打扰了。