Android应用中与文件名无关的sdcard文件访问方法

Android应用中与文件名无关的sdcard文件访问方法,android,file,Android,File,即使用户手动更改了特定文件的文件名,是否仍有办法访问该文件 举一个具体的例子,我的设备有一个位于“/mnt/sdcard/myfile.png”的文件,我的应用程序现在通过指示该文件的绝对路径(即“/mny/sdcard/myfile.png”)来访问该文件。但是,如果用户更改文件名,则此操作将失败。我想通过常量标识符获取文件,该标识符在文件名修改后不会更改。否。我认为没有任何唯一的文件标识可用。就像在DOS(磁盘操作系统)和Windows中一样,它们使用FAT和NTFS来了解每个项目的唯一媒体

即使用户手动更改了特定文件的文件名,是否仍有办法访问该文件


举一个具体的例子,我的设备有一个位于“/mnt/sdcard/myfile.png”的文件,我的应用程序现在通过指示该文件的绝对路径(即“/mny/sdcard/myfile.png”)来访问该文件。但是,如果用户更改文件名,则此操作将失败。我想通过常量标识符获取文件,该标识符在文件名修改后不会更改。

否。我认为没有任何唯一的文件标识可用。就像在DOS(磁盘操作系统)和Windows中一样,它们使用FAT和NTFS来了解每个项目的唯一媒体信息(HDD)

但我不认为你可以通过代码访问这种内部资源。因此,如果文件本身没有文件名,就没有其他方法可以访问该文件

你的要求的另一种方式是(我相信你的文件不是太大)

  • 将文件副本放在一个名为
    backup
    的文件夹中
  • 创建一个Android服务,它会每隔一段时间在原始位置查找您的文件
  • 对于常规间隔,可以使用AlarmManager类
  • 如果服务未在原始位置找到文件(例如文件已删除或重命名),则此服务将从
    备份
    文件夹复制该文件并将其粘贴到原始文件夹上
然而,这个逻辑应该是最后一个实现选项,但好的方面是它100%满足您的需求。

试试这个

您可以从SD卡获取所有图像

        Cursor cur = this.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null,null);  
        startManagingCursor(cur);  
        cur.moveToFirst();
        while (cur.moveToNext()) {
            String str = cur.getString(cur.getColumnIndex(MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME));
            Log.e("#########",str);
        }

好的,我会设法不让用户更改文件名。谢谢你的建议@Ryo,我刚想了一件事,你的要求还有另一种方式。我会在晚上告诉你。:)我想知道是否可以使用I节点号。非常感谢你的好意!!!在常见的文件系统中,文件的路径是其唯一标识符:)@stoilkov,我知道这一部分,但我要说的是,很难检索到唯一的编号。感谢您的回答,但我想访问特定的文件,而不是全部!