如何在Java中使用SFTP获取目录的最新文件?
我正在尝试使用SFTP获取目录的最新文件。当目录中只有一个文件时,下面的代码给出了正确的最新文件。如果一段时间后在目录中创建了一个新文件,如果我再次运行下面的代码,它不会给出正确的最新文件,而是返回相同的旧文件。(要运行下面的代码,我使用的是计时器调度器) 使用如何在Java中使用SFTP获取目录的最新文件?,java,sftp,jsch,Java,Sftp,Jsch,我正在尝试使用SFTP获取目录的最新文件。当目录中只有一个文件时,下面的代码给出了正确的最新文件。如果一段时间后在目录中创建了一个新文件,如果我再次运行下面的代码,它不会给出正确的最新文件,而是返回相同的旧文件。(要运行下面的代码,我使用的是计时器调度器) 使用LsEntry.getAttrs().getMTime()查询SFTP服务器上文件的修改时间 Vector<LsEntry> files = channelSftp.ls(filePath + "*.csv"); LsEntr
LsEntry.getAttrs().getMTime()
查询SFTP服务器上文件的修改时间
Vector<LsEntry> files = channelSftp.ls(filePath + "*.csv");
LsEntry newestEntry = null;
for (LsEntry entry : files)
{
if (!entry.getFilename().equals(".") && !entry.getFilename().equals(".."))
{
if ((newestEntry == null) ||
(newestEntry.getAttrs().getMTime() < entry.getAttrs().getMTime()))
{
newestEntry = entry;
}
}
}
if (newestEntry != null)
{
System.out.println(
"Newest file is " + newestEntry.getFilename() +
" with timestamp " + newestEntry.getAttrs().getMtimeString());
}
向量文件=channelSftp.ls(filePath+“*.csv”);
LsEntry newestEntry=null;
用于(LsEntry条目:文件)
{
如果(!entry.getFilename().equals(“.”&&!entry.getFilename().equals(“..”)
{
if((newestEntry==null)||
(newestEntry.getAttrs().getMTime()解释代码不起作用的原因:只将文件名复制到
文件
列表中,因此文件.lastModified()
无法返回任何相关值。此外,文件
对象仅用于本地文件。它可以用于集合或流,因为Vector.class与Java集合完全兼容:
Vector<LsEntry> list = channelSftp.ls(filePath + "*.csv");
ChannelSftp.LsEntry lastModifiedEntry = Collections.max(list,
(Comparator.comparingInt(entry-> entry.getAttrs().getMTime()))
);
Vector<LsEntry> files = channelSftp.ls(filePath + "*.csv");
LsEntry newestEntry = null;
for (LsEntry entry : files)
{
if (!entry.getFilename().equals(".") && !entry.getFilename().equals(".."))
{
if ((newestEntry == null) ||
(newestEntry.getAttrs().getMTime() < entry.getAttrs().getMTime()))
{
newestEntry = entry;
}
}
}
if (newestEntry != null)
{
System.out.println(
"Newest file is " + newestEntry.getFilename() +
" with timestamp " + newestEntry.getAttrs().getMtimeString());
}
Vector<LsEntry> list = channelSftp.ls(filePath + "*.csv");
ChannelSftp.LsEntry lastModifiedEntry = Collections.max(list,
(Comparator.comparingInt(entry-> entry.getAttrs().getMTime()))
);
LsEntry lastModifiedEntry = list.stream().max(
Comparator.comparingInt(entry -> entry.getAttrs().getMTime())
).get();