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

标签 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);
            }
     }
}

我也尝试过使用 BufferedInputStream 和 ReadableByteChannel 。我尝试过在线程中运行它,我尝试过使用readreadLine。每个解决方案都会给我一个不完整的 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();
    }
}

关于java - 从 URL 复制 XML 文件返回不完整的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20143054/

相关文章:

java - 合规性验证(正则表达式)

java - 如何跟踪 Java 中的方法调用?

c++ - 如何创建生成 XML 并随后运行 DOS 命令的 C/C++ 程序?

java - XML 配置大小为 0

email - Mailchimp 在链接 url 中使用合并标签

php - 如何获取外部网站的基本 URL

java - 如何将对象从适配器发送到 Activity

java - Java中default关键字的作用是什么?

ruby - 使用 Ruby Savon 验证针对 WSDL 的 XML 响应

Java GUI - Web 浏览器和打开链接