【问题标题】:Copying files from a remote address seems to loose information从远程地址复制文件似乎丢失了信息
【发布时间】:2014-08-25 13:10:29
【问题描述】:

我有一个从网页读取文件并将其写入文件的程序。大多数时候这很好用,但有时文件会损坏。我想这与网络问题有关。我该怎么做才能让我的代码更稳定?

String filename = "myfile.txt";
File file = new File(PROFilePath+"/"+filename);
//Open the connection
URL myCon = new URL("url to a page");
URLConnection uc = myCon.openConnection();
FileOutputStream outputStream = new FileOutputStream(file);

int read = 0;
byte[] bytes = new byte[1024];
while ((read = uc.getInputStream().read(bytes)) != -1) {
    outputStream.write(bytes, 0, read);
}
uc.getInputStream().close();
outputStream.close();

【问题讨论】:

  • 你得到什么样的异常?
  • 我没有得到任何异常,但是文件“损坏”/不正确的代码页/字符。如果只是重新启动我的应用程序,它就可以工作。并且它永远不会仅在服务器上本地失败。因此我猜它与网络有关。我应该将 byte[1024] 更改为另一个值吗?我应该改用 HttpUrlConnection 吗?

标签: java file url download


【解决方案1】:

您没有为您的副本使用显式编码,您只是复制所有字节并将这些字节写入一个文件,稍后可能会使用不同的解码来读取该文件。找出这一点的一个简单方法是在发现“损坏”文件后比较远程地址上的文档字节和复制的文件。但是,由于您提供的信息不够详细,无法为您提供更具体的帮助。是否有您遇到困难的示例文档?查看this related question and answerthis thread 以更深入地讨论此问题。

至于您的怀疑:当您从远程地址读取数据时,连接不应该只是丢失 个字节。这将是实现中的一个非常严重的错误,因为您通过 TCP 连接(我猜 URL 的协议是 HTTP),丢失的包会自动得到补偿。如果连接中断,连接应该发出异常而不是静默失败。我不认为这是您的错误的根源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 2011-01-15
    • 2017-09-08
    • 2016-09-28
    • 1970-01-01
    • 2010-09-23
    相关资源
    最近更新 更多