从URL复制XML文件将返回不完整的文件

时间:2013-11-22 10:51:34

标签: java xml url timeout

我正在编写一个小程序来检索大量的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);
            }
     }
}

我也尝试过使用BufferedInputStreamReadableByteChannel。我尝试在线程中运行它,我尝试使用readreadLine。每个解决方案都会给我一个不完整的XML文件作为返回。

在我的一些测试中(我记不起哪些,抱歉),我收到了套接字连接重置错误 - 但上面的代码执行时没有错误消息。

我也手动下载了一些XML文件,以检查它们是否在远程服务器上实际完成 - 它们是什么。

1 个答案:

答案 0 :(得分:1)

我猜测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();
    }
}