无法读取具有相同System.currentTimeMillis的文件

时间:2018-02-10 06:05:40

标签: android file timestamp

我有一个应用程序。每当用户在我的应用程序中录制歌曲时,我在sdcard中创建一个文件,其名称中包含时间戳。使用System.currentTimeMillis创建时间戳。我在其他活动中阅读这些文件。假设用户录制了一个文件,然后转到SD卡并复制并粘贴第一个文件以生成SD卡中的其他文件。现在所有文件都具有相同的System.currentTimeMillis。现在,当我进行其他活动时,我无法看到任何文件。如何防止复制使用相同的时间戳粘贴相同的文件。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您无法阻止使用相同时间戳粘贴相同文件的此类行为。至少当文件在SD卡上时。

您可以尝试的其他解决方案是使用HashMap,而不是ArrayList

您可以使用

HashMap<String, MyRecording> mHashMap = new HashMap<String, MyRecording>();

而不是

ArrayList<MyRecording> arrayList = new ArrayList<MyRecording>();

HashMap中,您可以将fileName设置为键。所以不会重复。

对于迭代hashmap,您可以查看How to efficiently iterate over each entry in a 'Map'?

快乐编码: - )

答案 1 :(得分:0)

android系统甚至允许两个文件存在于同一个相同名称的同一个地方吗?这很奇怪,我从来没有尝试过。

无论如何,我会给你我的代码如何创建一个具有唯一文件名的文件以及如何在列表中加载这些文件名以在列表视图中显示它们,希望这可以帮助您解决问题。

首先我创建一个唯一的文件名,顺便说一句,AUDIO_RECORDER_FOLDER是一个字符串=&#34;我的记录文件夹&#34;

    private String getFilename() {
    filepath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
    File file = new File(filepath, AUDIO_RECORDER_FOLDER);
    if (!file.exists()) {
        file.mkdirs();
    }
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd-hh.mm.ss");
    String currentDateTimeString = simpleDateFormat.format(new Date());
    //String currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date());

    return (file.getAbsolutePath() + "/" + currentDateTimeString + AUDIO_RECORDER_FILE_EXT);
}

然后当我开始录制时,我称之为创建文件名:

String filename = getFilename();
...
fileOutputStream = new FileOutputStream(filename, true);
...(some codes)

然后我从用户sd卡加载它们,如果他有一个或内部存储,如果他没有像这样的SD卡:

filepath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) + "/my records folder";
File file = new File(filepath);
files = file.list();
if(files != null && files.length>0){
    records = new ArrayList<>();
    for(int i =0; i<files.length; i++){
       Records record = new Records();
       record.setTitle(files[i]);
       records.add(record);
    }
}

然后我将记录arraylist传递给我的适配器,那就是它。