【问题标题】:Get last Modified Date of Files in a directory获取目录中文件的最后修改日期
【发布时间】:2013-09-14 16:09:29
【问题描述】:

我在显示文件当前修改日期时遇到了一些问题。

public class MyAdapter extends ArrayAdapter<String> {

String dir = "/FileDirectory/";

File file = new File(Environment.getExternalStorageDirectory() + dir);

private final Activity context;

Date lastModified = new Date(file.lastModified()); 
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");  
String formattedDateString = formatter.format(lastModified); 

private String dateFormat = "dd/MM/yyyy HH:mm:ss";

static class ViewHolder {

    public TextView text;
}

public MyAdapter(Activity context, String[] date) {
    super(context, R.layout.row, date);
    this.context = context;
    formatter = new SimpleDateFormat(dateFormat);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View rowView = convertView;
    if (rowView == null) {
        LayoutInflater inflater = context.getLayoutInflater();
        rowView = inflater.inflate(R.layout.row, null);
        ViewHolder viewHolder = new ViewHolder();
        viewHolder.text = (TextView) rowView.findViewById(R.id.FilePath);
        rowView.setTag(viewHolder);
    }

    ViewHolder holder = (ViewHolder) rowView.getTag();

    String s = formattedDateString;

    holder.text.setText(s);

        return rowView;
    }
}

到目前为止,它只显示所有文件上目录的最后修改日期。任何帮助将不胜感激!

【问题讨论】:

  • 我认为这只是在做正确的事
  • 我该如何修复它,以便分别显示每个文件的修改日期?
  • 你可以通过我的方式获取一个目录的最后修改时间@user2250122

标签: java android file


【解决方案1】:

在您的问题中,您指向的是目录,而不是文件。

File file = new File(Environment.getExternalStorageDirectory() + dir);


private final Activity context;

Date lastModified = new Date(file.lastModified()); 
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");  
String formattedDateString = formatter.format(lastModified);

这个想法是获取一个目录并迭代搜索所有文件的最后修改日期。以下问题可能会有所帮助: How to get only 10 last modified files from directory using Java?

编辑 1:

我的棘手解决方案:

File images = new File("YourDirectoryPath");
long[] fileModifieDate = new long[images.listFiles().length];
int i=0;

        File[] imagelist = images.listFiles(new FilenameFilter()
        {

            public boolean accept(File dir, String name)
            {
                File file = new File(dir, name);
                fileModifieDate[i++] = file.lastModified();
                return true;
            }

        });
// Here, max is the last modified date for this directory 
// Here, Long array **fileModifieDate** will give modified time of all files, which you can also access from Files array
// if you want the last modified file in the directory you can do this:


        File[] maxModifiedDate = images.listFiles(new FilenameFilter()
        {

            public boolean accept(File dir, String name)
            {
                File file = new File(dir, name);

                return file.lastModified() == max;
            }

        });

// Now **maxModifiedDate** File array will have only one File, which will have max modified date.

编辑 2:

对于您的情况,这会有所帮助:

public class MyAdapter extends ArrayAdapter<String> {

String dir = "/FileDirectory/";

File myFolder= new File(Environment.getExternalStorageDirectory() + dir);
if(myFolder.exists()){


    File[] filelist = myFolder.listFiles(new FilenameFilter()
    {

        public boolean accept(File dir, String name)
        {  
            return true;
        }

    }); 
}   

// 现在你有了一个 filelist 文件数组。如果您想要 lastModified 数据,您可以像以前一样从每个单独的文件中获取:

  private final Activity context;

    Date lastModified = new Date(file.lastModified()); 
    SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");  
    String formattedDateString = formatter.format(lastModified); 

    private String dateFormat = "dd/MM/yyyy HH:mm:ss";

【讨论】:

  • 感谢您的回复。那么我想要的是在列表中修改每个文件时显示。如果它们被正确排序,对我来说没什么大不了的。
  • @user2250122 :我认为从文件列表中您可以获取所有文件的 lastModified 日期查看更新的答案,该答案澄清并列出了目录中所有文件的所有修改日期
  • 有什么问题,只是根据您的要求更改路径
  • 我需要将它挂接到我的文件数组中。
  • 因为现在你有了文件数组,现在你可以获得所有可用的文件属性
【解决方案2】:

获取最后修改日期的完整代码

    File file = new File("c:\\test\\myfile.txt");
    SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
    System.out.println("Modified Date :- " + sdf.format(file.lastModified()));

【讨论】:

    【解决方案3】:

    File file = new File(Environment.getExternalStorageDirectory() + dir);

    指向目录,而不是文件。

    如果您需要在一个目录中单独修改每个文件的日期,只需使用 walkfiletree

    检查this

    【讨论】:

      【解决方案4】:

      我尝试了 Anonymous Mohit 的答案,但它只检查文件夹内项目的文件大小。但是如果有很多子文件夹怎么办?以下是我的做法。

      public static long lastModifiedDate;
      public static long getLastModified(String path) {
          File directory = new File(path);
          File[] files = directory.listFiles();
          if(GlobalValues.DEBUG) Log.i(TAG, "Get last modified date: " + path);
          if (files.length == 0) return directory.lastModified();
          else {
              for(File filesInFolder: files) {
                  if(filesInFolder.isDirectory()) {
                      getLastModified(filesInFolder.getAbsolutePath());
                  } else {
                      if(lastModifiedDate == 0) {
                          lastModifiedDate = filesInFolder.lastModified();
                      } else{
                          if(filesInFolder.lastModified() >= lastModifiedDate){
                              lastModifiedDate = filesInFolder.lastModified();
                          }
                      }
                  }
              }
              return lastModifiedDate;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2021-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-26
        • 2010-09-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多