【问题标题】:Need to sort Files based on date created [duplicate]需要根据创建日期对文件进行排序[重复]
【发布时间】:2014-05-21 15:48:09
【问题描述】:

我看过其他帖子,但似乎无法在我的帖子中很好地表达出来。有人可以帮我解决这个问题。我可以查看文件并打开它们,但需要它们从最近创建到最旧列出。下面是我的代码。

    private List<String> fileList = new ArrayList<String>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

   String root = Environment.getExternalStoragePublicDirectory("/MyAppFolder").
            getAbsolutePath();
    // ListDir(root);

    pdf = new File(root);
    ListDir(pdf);
   }

    void ListDir(File f) {
    File[] files = f.listFiles();
    fileList.clear();

    for (File file : files) {



        fileList.add(file.getName());

    }



    ArrayAdapter<String> directoryList = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, fileList);

    setListAdapter(directoryList);

  }

  public void onListItemClick(ListView parent, View v, int position, long id) {
    //selection.setText(fileList.indexOf(simple_list_item_1));
    OpenPdf(fileList.get(position).toString());
  }



  public void OpenPdf(String path)
  {
      File file = new File(path);
      if (file.exists()) {
          Uri p = Uri.fromFile(file);
          Intent intent = new Intent(Intent.ACTION_VIEW);
          intent.setDataAndType(p, "application/pdf");
          intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

          try {
              startActivity(intent);
          } 
          catch (ActivityNotFoundException e){
          }
      }
  }
}

【问题讨论】:

  • 此副本是相关问题列表中的第一个。请进行一些研究。

标签: java android file date comparator


【解决方案1】:

您可以查看以下question,这显示了如何为最后一个 mod 时间戳执行此操作。它应该很容易适应您的情况。

这里最有趣的部分是比较器。

【讨论】:

  • 这是我得到的错误-----这一行有多个标记 - 对于 List 类型的方法 sort(File[], new Comparator(){}) 未定义- 比较器是原始类型。对泛型类型 Comparator 的引用应该被参数化
  • 你需要自己编写比较器。
  • 这里,我试过了。比较器不太好,但这就是我得到的..... fileList.sort(files, new Comparator() { public int compare(Object o1, Object o2) { if (((File)o1).lastModified() > ((File)o2).lastModified()) { return -1; } else if (((File)o1).lastModified()
【解决方案2】:
Comparator<File> fileDateCmp = new Comparator<File>() {
    public int compare(File f1, File f2) {
        return Long.compare(f1.lastModified(), f2.lastModified());
    }
};


File[] yourArrayOfFiles
Arrays.sort(yourArrayOfFiles, fileDateCmp);

例如在我学校的电脑上:

    Comparator<File> fileDateCmp = new Comparator<File>() {
        public int compare(File f1, File f2) {
            return Long.compare(f1.lastModified(), f2.lastModified());
        }
    };

    File[] yourArrayOfFiles = File.listRoots();

    System.out.println(Arrays.toString(yourArrayOfFiles));

    Arrays.sort(yourArrayOfFiles, fileDateCmp);
    System.out.println(Arrays.toString(yourArrayOfFiles));
    for(File file : yourArrayOfFiles) {
        System.out.print(file + ": ");
        System.out.println(file.lastModified());
    }

输出:

[C:\, D:\, K:\, M:\, P:\, S:\, U:\, V:\]
[D:\, V:\, M:\, K:\, P:\, U:\, S:\, C:\]
D:\: 0
V:\: 1370008587158
M:\: 1386966108069
K:\: 1395062748515
P:\: 1396364590821
U:\: 1398716910066
S:\: 1400518034257
C:\: 1400684450266

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    相关资源
    最近更新 更多