我的目录中包含用户名和电话号码的文本文件列表。每次用户更改其保存在同一目录中的新文件中的电话号码。现在我正在搜索 一个用户,其条目存在于多个文件中。如何找到上次修改文件的名称..? 下面是我目前提出的代码片段。
public static String queryFile() throws IOException{
File directory = new File("E:\\idm\\users\\output");
Boolean isUserPresent = false;
String queryUser = "Mar25-user6";
ArrayList arr = new ArrayList();
if(directory.isDirectory())
{
File[] fileNames = directory.listFiles();
for(int i=0;i<fileNames.length;i++)
{
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileNames[i])));
while((line = reader.readLine()) != null)
{
if(line.contains(queryUser))
{
arr.add(fileNames[i]);
}
}
}
/*
how to check the last modified file from among files present in Arraylist arr.
*/
if (arr.isEmpty)
{
isUserPresent = false;
return "";
}
else
{
isUserPresent = true;
// return name of file if user present
}
}
}
通过javadoc我找到了File.lastModified()函数。比较这个函数返回的值是唯一的选项..?
答案 0 :(得分:1)
您可以在else
块中使用此代码返回包含用户名的最新文件(arr是列表中包含所有包含用户名的文件的名称):
Collections.sort(arr, new Comparator<File>() {
@Override
public int compare(String file1, String file2) {
return Long.valueOf(new File(file2).lastModified()).compareTo(
new File(file1).lastModified());
}
});
arr.get(0); //
答案 1 :(得分:0)
使用file.lastModified()
获取每个文件的最后修改日期,然后相互比较
答案 2 :(得分:0)
Java没有这项工作的现成API,但可以通过使用.lastModified()
方法在日期周围添加一些逻辑来轻松实现,或者也可以使用Apache FileUtils
。我建议使用Apache Utils。
我会这样:
这只是一个想法,您也可以通过遍历目录列表来实现相同目的。
答案 3 :(得分:0)
要获取File
对象的上次修改时间戳,您确实会调用lastModified()
方法。您已经有一个文件的ArrayList,因此遍历它以查找最后修改的字段应该是微不足道的。您还在循环文件列表,因此不需要再次循环并找到最后修改的文件。我还建议您对代码进行一些其他优化:
List<File> fileNames = new ArrayList<File>(); // I would rather call this variable "files" though
long latestModified = -1;
File lastModifiedFile = null;
// ...
for(File file : directory.listFiles()) {
// Do your magic
if(line.contains(queryUser)) {
filesNames.add(file);
if(file.lastModified() > latestModified) {
lastModifiedFile = file;
latestModified = file.lastModified();
}
}
}
// After the loop, the latest modified file will be held i the variable `lastModifiedFile`
我不确定ArrayList
的目的是什么,但也许你可以一起摆脱它。
答案 4 :(得分:0)
我会这样做
File lastModified = null;
for (File file : directory.listFiles()) {
if (file.isFile()) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(new FileInputStream(file)));
try {
for (String line; (line = reader.readLine()) != null;) {
if (line.contains(queryUser)) {
arr.add(file);
if (lastModified == null
|| file.lastModified() > lastModified
.lastModified()) {
lastModified = file;
}
}
}
} finally {
reader.close();
}
}
}