Java 获取目录中文件的最后修改日期
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18803675/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Get last Modified Date of Files in a directory
提问by user2250122
I am having some trouble displaying the files currently modified date.
我在显示当前修改日期的文件时遇到了一些问题。
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;
}
}
As of now it just displays the last modified date of the directory on all files. Any help would be greatly appreciated!
截至目前,它只显示所有文件上目录的最后修改日期。任何帮助将不胜感激!
回答by Boy
File file = new File(Environment.getExternalStorageDirectory() + dir);
File file = new File(Environment.getExternalStorageDirectory() + dir);
Points to directory, not a file.
指向目录,而不是文件。
If you need modified date of each file separately in a directory, just use walkfiletree.
如果您需要在目录中单独修改每个文件的日期,只需使用walkfiletree。
Check this.
检查这个。
回答by Trikaldarshi
In your question, you are pointing a Directory, not a File.
在您的问题中,您指向的是目录,而不是文件。
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);
The idea is to get a Directory and iterate searching for the Last modified date of all files. The following question may help: How to get only 10 last modified files from directory using Java?
这个想法是获取一个目录并迭代搜索所有文件的最后修改日期。以下问题可能会有所帮助: 如何使用 Java 从目录中仅获取 10 个最后修改的文件?
EDIT 1:
编辑 1:
My Tricky Solution:
我的棘手解决方案:
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.
EDIT 2:
编辑2:
For your case, this would be helpful:
对于您的情况,这会有所帮助:
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;
}
});
}
// Now you have a filelistarray of Files. If you want lastModified data, you can fetch from each individual file as you were doing previously:
// 现在你有一个文件的文件列表数组。如果你想要 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";
回答by Vicky
Complete code to get the last modified date
获取最后修改日期的完整代码
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()));
回答by Omatt
I tried the answer of Anonymous Mohit, but it only checks the file size of items inside the folder. But what if there are many subfolders? Here's how I did it.
我尝试了 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;
}
}