首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从URL复制XML文件返回不完整文件

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

Stack Overflow用户
提问于 2013-11-22 10:51:33
回答 1查看 666关注 0票数 1

我正在编写一个小程序来检索大量的XML文件。程序是可以工作的,但是不管我使用的是哪种堆栈溢出解决方案,我在本地保存的每个XML文件都会丢失文件的末尾。我所说的“文件的结尾”指的是大约5-10行xml代码。文件有不同的长度(大约500-2500行),总长度似乎对丢失位的大小没有影响。当前的代码如下:

代码语言:javascript
复制
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文件,以检查它们是否真的在远程服务器上完成--它们就是。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-22 10:53:27

我猜想,在这个过程中的某个地方,BufferedWriter或BufferedOutputStream没有让flush()调用它。

为什么不编写自己的复制函数来排除FileUtils.copyURLToFile(u, f)

代码语言:javascript
复制
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();
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20143054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档