提问人:user2250122 提问时间:9/15/2013 最后编辑:Trikaldarshiiiuser2250122 更新时间:11/17/2023 访问量:42685
获取目录中文件的上次修改日期
Get last Modified Date of Files in a directory
问:
我在显示当前修改日期的文件时遇到了一些问题。
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;
}
}
截至目前,它只显示所有文件上目录的上次修改日期。任何帮助将不胜感激!
答:
0赞
Boy
9/15/2013
#1
File file = new File(Environment.getExternalStorageDirectory() + dir);
指向目录,而不是文件。
如果您需要在目录中单独修改每个文件的日期,只需使用 walkfiletree。
检查这个。
11赞
Trikaldarshiii
9/15/2013
#2
在您的问题中,您指向的是目录,而不是文件。
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);
这个想法是获取一个目录并迭代搜索所有文件的上次修改日期。以下问题可能会有所帮助:如何使用 Java 从目录中仅获取 10 个上次修改的文件?
编辑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;
}
});
}
现在你有了一个 Files 的 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";
评论
0赞
user2250122
9/15/2013
感谢您的回复。好吧,我想要的是显示每个文件在列表中被修改的时间。如果它们排序正确,对我来说没什么大不了的。
0赞
Trikaldarshiii
9/15/2013
@user2250122:我认为从文件列表中您可以获得所有文件的上次修改日期,请参阅更新的答案,该答案澄清并列出了目录中所有文件的所有修改日期
0赞
Trikaldarshiii
9/15/2013
有什么问题,只需根据您的要求更改路径即可
0赞
user2250122
9/15/2013
我需要将它挂接到我的文件数组中。
0赞
Trikaldarshiii
9/15/2013
因为现在你有文件数组,现在你可以得到所有文件属性可用
3赞
Vicky
3/15/2014
#3
获取上次修改日期的完整代码
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()));
0赞
Omatt
7/3/2015
#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;
}
}
0赞
Anvar
11/17/2023
#5
Kotlin 实现:
fun getLastModified(path: String): Long {
val directory = File(path)
var dirTS = directory.lastModified()
val listFilesAndSubDirs = directory.listFiles()
if (listFilesAndSubDirs.isEmpty()){
return dirTS
}
for (file in listFilesAndSubDirs) {
val itemTS = if (file.isDirectory) {
getLastModified(file.path)
} else {
file.lastModified()
}
if (itemTS > dirTS){
return itemTS
}
}
return dirTS
}
上一个:获取目录中文件的上次修改日期
下一个:从另一个文件夹中的文件导入类
评论