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

Groovy:从文件读取一系列行

段干麒
2023-03-14
问题内容

我有一个文本文件,其中包含大约2,000,000行的大量数据。使用以下代码片段浏览文件很容易,但这不是我所需要的;-)

def f = new File("input.txt")
f.eachLine() {
    // Some code here
}

我只需要从文件中读取特定范围的行。有没有办法像这样(伪代码)指定开始和结束行?在选择范围之前,我想避免使用readLines()将所有行加载到内存中。

// Read all lines from 4 to 48
def f = new File("input.txt")
def start = 4
def end = 48
f.eachLine(start, end) {
    // Some code here
}

如果Groovy无法做到这一点,那么也欢迎使用任何Java解决方案:-)


问题答案:

我不认为有任何“魔术”方法可以跳到文件中的任意“行”。行仅由换行符定义,因此,如果不实际读取文件,就无法知道行将在何处。我相信您有两种选择:

  1. 遵循Mark Peter的回答,并使用BufferedReader一次一行读取文件,直到到达所需的行。这显然很慢。
  2. 找出下一次读取需要从多少字节(而不是行)开始,并使用RandomAccessFile之类的东西直接寻找文件中的该点。是否可以有效地知道正确的字节数取决于您的应用程序。例如,如果要顺序读取文件,一次读取一个文件,则只需记录下一个停止的位置。如果所有行的长度都是固定的L字节,那么到达第N行只是寻找位置N * L的问题。如果您经常重复此操作,则一些预处理可能会有所帮助:例如,一次读取整个文件,并将每行的开始位置记录在内存中的HashMap中。下次您需要转到N行时,只需在HashMap中查找它的位置并直接寻找到该点即可。


 类似资料:
  • 我使用expo下载了一张图片(a.jpg),代码如下: 文件成功保存在文件系统中。后来当我试图读取文件时,我得到一个错误,文件无法读取。用于读取文件的代码: 上面的代码返回文件无法读取的错误。fileInfo.exists是true,因为文件存在于文件系统中。 读取文件时出错: 如果我尝试读取一个文本文件(a.json),而不是jpg(a.jpg),那么一切都很好。所以,文件系统。readAsSt

  • 问题内容: 我是Jenkins和groovy脚本的新手,我想读取一个.txt文件,该文件位于其中一个作业的工作空间中。我正在尝试这样做: 但是会导致以下错误: groovy.lang.MissingMethodException:方法的无签名:hudson.FilePath.readFileFromWorkspace()适用于参数类型:(java.lang.String)值:[file.txt]

  • 问题内容: 我想使用Groovy插件添加一个Build步骤来读取文件并根据文件内容触发构建失败。 如何在groovy插件中注入工作区文件路径? 问题答案: 根据您的评论,使用 Text-finder 插件会更好。 它允许在文件以及控制台中搜索正则表达式,然后设置构建或找到构建。 对于Groovy,可以使用以下命令来访问环境变量:

  • 字符串表[]=新字符串[100];

  • 问题内容: 这是一个有点奇怪的请求,但我正在寻找一种方法来将列表写入文件,然后再读回去。 我没有办法重新制作列表,以使它们如下面的示例所示正确地形成/格式化。 我的列表具有如下数据: 问题答案: 如果您不需要它是人类可读/可编辑的,则最简单的解决方案是使用。 来写: 读书: 如果您 确实 需要使它们易于阅读,则我们需要更多信息。 如果保证是没有嵌入换行符的字符串列表,则只需每行写一个: 如果它们是