【问题标题】:Renaming file messing up with the file重命名文件与文件混淆
【发布时间】:2019-03-08 11:29:14
【问题描述】:

我正在尝试重命名文件和 android studio。但是当我尝试重命名文件时,文件的可读、可写和隐藏属性被设置为 false。并且文件的最后修改日期更改为“01/01/1970 05:30 AM”。

//minSdkVersion 19

private ArrayList<FileData> getMusic(Context context) {
    ArrayList<FileData> fileData = new ArrayList<>();

    ContentResolver contentResolver = context.getContentResolver();
    String[] projection = {MediaStore.Audio.Media.DATA};
    Cursor externalCursor = contentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, null, null, null);

    while (Objects.requireNonNull(externalCursor).moveToNext()) {
        System.out.println(externalCursor.getString(0));
        fileData.add(getFileData(context, new File(externalCursor.getString(0))));
    }

    sortByDate(fileData);

    return groupDateWise(fileData);
}

重命名文件

File renameFile = new File(file.getParent(), editText.getText().toString().trim());
boolean success = file.renameTo(renameFile);

重命名之前

(https://i.stack.imgur.com/nmhUI.png)

重命名后

(https://i.stack.imgur.com/CtUCi.png)

感谢您的帮助。

【问题讨论】:

    标签: java android file android-contentresolver


    【解决方案1】:

    如果您无法访问 java.nio 软件包,您可以明确设置这些标志

    boolean success = file.renameTo(renameFile);
    
    if (success) {
       renameFile.setReadable(true);
       renameFile.setWritable(true);
    }
    

    JavaDoc 来救援!

    此方法的行为的许多方面都与生俱来 平台相关。

    我建议你不要使用renameTo。
    而是寻找Files#move (docs)

    move(Path source, Path target, CopyOption... options)
    

    例子:

    Files.move(file.getParent().toPath(), renameFile.toPath() /* Or simply Paths.get("your-path") */);
    

    【讨论】:

    • 我使用的最低 SDK 版本是 19。这是解决方案需要 SDK 26
    猜你喜欢
    • 1970-01-01
    • 2018-06-07
    • 2017-06-05
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多