所以我试图将一个相当大的XML文件读入一个String。目前正在加入.readLines()列表,如下所示:
def is = zipFile.getInputStream(entry)
def content = is.getText('UTF-8')
def xmlBodyList = content.readLines()
return xmlBodyList[1..xmlBodyList.size].join("")
但是我在控制台中收到了这个输出:
java.lang.IndexOutOfBoundsException:toIndex = 21859
我不需要对IndexOutOfBoundsExceptions有任何解释,但我很难弄清楚如何围绕这个问题进行编程。
我如何以不同的方式实现它,因此它允许足够大的文件大小?
答案 0 :(得分:1)
关于Good way to avoid java.lang.IndexOutOfBoundsException
错误在这里:
return xmlBodyList[1..xmlBodyList.size].join("")
在访问之前检查变量的好方法,您可以使用相对范围访问器:
assert xmlBodyList.size>1 //check value
return xmlBodyList[1..-1].join("") //use relative indexes -1 = the last one
关于large files processing
如果你需要迭代所有的行并执行一些操作,这里有一个例子:
def stream = zipFile.getInputStream(entry)
stream.eachLine("UTF-8"){line, index->
if(index>1){ //skip first line
//do something here with each line from file
println "$line $index"
}
}
在java.io.InputStream上有很多额外的groovy方法可以帮助你处理大文件而不将其加载到内存中:
http://docs.groovy-lang.org/latest/html/groovy-jdk/java/io/InputStream.html