我正在编写一个小程序来检索大量的XML文件。该程序在某种程度上是可行的,但无论我使用stackoverflow的哪种解决方案,我在本地保存的每个XML文件都会错过文件的末尾。我所说的"文件末尾"是指大约5-10行的xml代码。这些文件的长度不同(约500-2500行),总长度似乎对缺失位的大小没有影响。目前代码如下:
package plos;
import static org.apache.commons.io.FileUtils.copyURLToFile;
import java.io.File;
public class PlosXMLfetcher {
public PlosXMLfetcher(URL u,File f) {
try {
org.apache.commons.io.FileUtils.copyURLToFile(u, f);
} catch (IOException ex) {
Logger.getLogger(PlosXMLfetcher.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
我也尝试过使用BufferedInputStream
和ReadableByteChannel
。我试过在线程中运行它,我试过使用read
和readLine
。每个解决方案都会给我一个不完整的XML文件作为回报。
在我的一些测试中(对不起,我记不清是哪一个了),我收到了一个套接字连接重置错误,但上面的代码执行时没有错误消息。
我还手动下载了一些XML文件,以检查它们在远程服务器上是否真的完整。
我猜在某个地方,BufferedWriter或BufferedOutputStream还没有调用flush()
。
为什么不编写自己的复制函数来排除FileUtils.copyURLToFile(u, f)
public void copyURLToFile(u, f) {
InputStream in = u.openStream();
try {
FileOutputStream out = new FileOutputStream(f);
try {
byte[] buffer = new byte[1024];
int count;
while ((count = in.read(buffer) > 0) {
out.write(buffer, 0, count);
}
out.flush();
} finally {
out.close();
}
} finally {
in.close();
}
}