我正在尝试找到一种方法,可以通过SFTP从服务器读取大型动态日志文件的末尾(如末尾20-30行),并将该点保存到读取的位置,如果需要读取更多行,则可以读取更多内容从这一点上来看。
我尝试过的所有事情都花费了很长时间,我试图将其复制到计算机上,然后再从终端读取以使用ReversedLinesFileReader
该方法File
,因为这种方法需要对象,通过SFTP时,您只会得到InputStream
很多东西,而下载文件需要很多时间。
还尝试对行进行计数并从n行读取,但是也花费了太长时间并引发异常,因为此时间中的某个时间文件已被修改。我尝试通过SSH连接并使用tail -100
并获得所需结果的另一种方法,但这只是一次,因为下一次我还将获得新的日志,但是我需要向上移动。有没有一种快速的方法来获取文件结尾并保存该点,并在以后读取该点的更多内容?任何想法?
您没有说使用什么SFTP库,但是使用最广泛的Java SSH /
SFTP库是JSch,所以我假设您正在使用它。
该SFTP协议具有操作在远程文件执行随机存取的I / O。不幸的是,JSch
SFTP客户端没有公开全部操作。但是,它确实具有该get
操作的版本(用于从远程服务器获取文件),该版本允许跳过远程文件的第一部分。您可以使用这些操作之一来读取例如文件的最后10 KB。
一些JSch
get
操作返回InputStream
。您可以从输入流中读取远程文件的内容。如果要逐行访问远程文件,可以将其转换为Reader
using
InputStreamReader
。
因此,一个过程可能会执行以下操作:
stat()
远程文件以获取其大小。get()
开始阅读。InputStream
返回的过程数据中读取数据get()
。我正在从sftp服务器读取文件,并使用Spring Batch Framework将该文件加载到数据库中。下面是我的代码,但我遇到了一个错误 代码: 错误:
问题内容: 我目前正在尝试从Python 2.7中的.csv文件中读取数据,该文件最多包含100万行和200列(文件范围从100mb到1.6gb)。对于少于300,000行的文件,我可以(非常缓慢地)执行此操作,但是一旦超过该行,就会出现内存错误。我的代码如下所示: 在getstuff函数中使用else子句的原因是,所有符合条件的元素都将一起列在csv文件中,因此当我经过它们时,为了节省时间,我离
问题内容: 我正在尝试使用Java从使用SFTP(而不是FTPS)的服务器检索文件。我怎样才能做到这一点? 问题答案: 另一个选择是考虑查看JSch库。JSch似乎是一些大型开源项目的首选库,其中包括Eclipse,Ant和Apache Commons HttpClient。 它很好地支持用户/通过和基于证书的登录,以及所有其他许多美味的SSH2功能。 这是通过SFTP检索的简单远程文件。错误处理
我想用定制的发布
问题内容: 我目前正在尝试从Python 2.7中的.csv文件中读取数据,该文件最多包含100万行和200列(文件范围从100mb到1.6gb)。对于少于300,000行的文件,我可以(非常缓慢地)执行此操作,但是一旦超过该行,就会出现内存错误。我的代码如下所示: 在getstuff函数中使用else子句的原因是,所有符合条件的元素都将一起列在csv文件中,因此,经过它们以节省时间时,我离开了循
我的问题是: > 如何使其与较大的文件一起工作? 有什么办法能让它快一点吗? 我的电脑有8GB的RAM,运行64位Windows 7,处理器是3.40GHz(不确定你需要什么信息)。