Android oldFile.renameTo(newFile)无法在较低的Android上运行

时间:2017-12-04 21:57:53

标签: java android file android-external-storage

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

我有一个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");
    }

日志结果如下:

旧文件存在

新文件名: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,我真的不知道为什么......如果你们有一个解决方案会很好。随意提问

1 个答案:

答案 0 :(得分:0)

正当我关闭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中有效。 我猜这些选项将来会被添加。无论如何,这是一个多么愚蠢的错误,但很高兴我发现了它。抱歉打扰。