当前位置: 首页 > 面试题库 >

使用Java查找SFTP最旧文件的文件大小和最后修改

罗梓
2023-03-14
问题内容

我正在使用JSch从SFTP服务器获取文件,但是我试图找出一种方法来仅获取最旧的文件,并确保当前未将其写入。我想象自己这样做的方式是,首先找到指定远程文件夹中哪个文件最旧。然后,我将检查文件大小,等待x秒(大约10秒,为了安全起见),然后再次检查。如果文件大小没有更改,我将下载文件并进行处理。但是,我不知道该怎么做!如果有人知道如何执行此操作,或者知道其他支持具有此内置SFTP的功能(我知道Apache
Commons可以,但FTPS只能),将不胜感激。

提前致谢。


问题答案:

事实证明,这在JSch中是完全可能的,最困难的部分只是查找文档。我在下面使用的代码,希望其他人会有所帮助!(我知道,我知道需要进行优化。在其他地方也定义了变量,但是希望任何需要此变量的人都可以解决这些问题!)

public static String oldestFile() {
    Vector list = null;
    int currentOldestTime;
    int nextTime = 2140000000; //Made very big for future-proofing
    ChannelSftp.LsEntry lsEntry = null;
    SftpATTRS attrs = null;
    String nextName = null;
    try {
        list = Main.chanSftp.ls("*.xml");
        if (list.isEmpty()) {
            fileFound = false;
        }
        else {
            lsEntry = (ChannelSftp.LsEntry) list.firstElement();
            oldestFile = lsEntry.getFilename();
            attrs = lsEntry.getAttrs();
            currentOldestTime = attrs.getMTime();
            for (Object sftpFile : list) {
                lsEntry = (ChannelSftp.LsEntry) sftpFile;
                nextName = lsEntry.getFilename();
                attrs = lsEntry.getAttrs();
                nextTime = attrs.getMTime();
                if (nextTime < currentOldestTime) {
                    oldestFile = nextName;
                    currentOldestTime = nextTime;
                }
            }
            attrs = chanSftp.lstat(Main.oldestFile);
            long size1 = attrs.getSize();
            System.out.println("-Ensuring file is not being written to (waiting 1 minute)");
            Thread.sleep(60000); //Wait a minute to make sure the file size isn't changing
            attrs = chanSftp.lstat(Main.oldestFile);
            long size2 = attrs.getSize();
            if (size1 == size2) {
                System.out.println("-It isn't.");
                fileFound = true;
            }
            else {
                System.out.println("-It is.");
                fileFound = false;
            }
        }
    } catch (Excepthtml" target="_blank">ion ex) {ex.printStackTrace();}
    return Main.oldestFile;
}


 类似资料:
  • 作为这个问题的一部分,我需要找到: 数字的数量(计数) 数字之和(sum) 数字的平均值(平均值) 哪些数字是偶数(偶数) 哪些数字是奇数(赔率) 我尝试在while循环中执行此操作: 其思想是,当while循环迭代时,它会将它通过的数字与最大值进行比较,并将它在计数中找到的最大值与最大值进行匹配,如果它找到的数字大于最大值,则成为新的最大值。对最小的也是同样的想法。 但它并不起作用。我该怎么办?

  • 本文向大家介绍PowerShell查找分区中最大文件的方法(查找文件并按大小排序),包括了PowerShell查找分区中最大文件的方法(查找文件并按大小排序)的使用技巧和注意事项,需要的朋友参考一下 本文介绍一个PowerShell命令,用于将某个目录或磁盘(如D盘)下占用空间最大的前几个文件。这个任务在其它编程语言中,可能要大段大段的代码,而在PowerShell中,我们只需要一行。 当我们发现

  • 我试图找到每一行CSV文件的MIN和MAX值,并将它们附加到列表中的下一个位置,位置5和6。我已经设法计算了平均值,将其附加到第四个位置,并将其从最高到最低输出。然而,我正在努力解决如何找到每行的MAX和MIN值,以便我可以做同样的操作——从最高到最低。原始CSV的格式是:弗雷德,56,78,99,每个用户在新行上。 任何帮助都将不胜感激。

  • 问题内容: 我正在编写一个Python备份脚本,需要在目录(及其子目录)中找到最旧的文件。我还需要仅将其过滤为* .avi文件。 该脚本将始终在Linux计算机上运行。有什么方法可以在Python中完成,还是运行一些Shell命令会更好? 目前,我正在努力获取特定分区上的可用空间,如果可用空间不足5 GB,我想开始删除最旧的文件,直到满足该条件为止。 问题答案: 嗯 Nadia的答案是接近你什么

  • 我正在使用PyCharm社区版2016,我注意到我无法打开大型数据输入文件或日志(20MB)。编辑简单地说“文件XXX太大(大小)”。 不仅如此,似乎没有办法改变限制。官方文档提到了一种增加使用intellisense的最大大小的方法,但根本没有增加可以打开的文件的最大大小。这是真的吗?这真的是一个完全无法打开大型日志的IDE吗?

  • 问题内容: 甲文件是一个相当有据可查的格式定义部分和大小,因此,最大尺寸为好。 例如,一个文件包含一个幻数(4个字节),一个版本(4个字节),常量池(可变大小)等。但是大小可以在几个级别上定义:您可以有65535个方法,每个方法都限于65535字节。 其他限制是什么? 而且,如果您要制作最大的文件,它将是多少? 如果需要,将答案限制为Java。这意味着如果Scala或Clojure(或…)更改了一