java - 从远程地址复制文件似乎丢失了信息

标签 java file url download

我有一个程序可以从网页读取文件并将其写入文件。大多数情况下这工作正常,但有时文件会损坏。我想这与网络问题有关。我可以做些什么来使我的代码更稳定?

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();

最佳答案

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

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

关于java - 从远程地址复制文件似乎丢失了信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24570161/

相关文章:

java - 如何使用递归在链表中成对交换节点?

java - Spring Boot 中的自定义异常

PHP 脚本将大文件夹中的文件排序到基于日期的子文件夹中

WordPress:更改永久链接结构后如何重定向旧链接?

java - 作为 URL 参数值的分隔列表

java - 如何根据 Option 值获得 Either left/right

java - 提示用户输入密码并检查条件的程序

file - 复制文件的简单方法

performance - RAMdisk 比磁盘慢?

java - 应使用什么类型的字符集 URL 编码?