所以,我有这组代码下载文件,似乎认为它有效,但下载的文件已损坏。
try{ java.io.BufferedInputStream in = new java.io.BufferedInputStream(new java.net.URL(args[1]).openStream()); java.io.FileOutputStream fos = new java.io.FileOutputStream(args[2]); java.io.BufferedOutputStream bout = new BufferedOutputStream(fos,1024); byte data[] = new byte[1024]; int count; while( (count = in.read(data,0,1024)) != -1){ bout.write(data,0,count); } fos.flush(); fos.close(); } catch(Exception e){ }
args [1]是网址
答案 0 :(得分:3)
问题是你正在刷新并关闭FileOutputStream
,这会在BufferedOutputStream
的缓冲区中留下一些字节;你的文件将在最后的0到1024字节之间丢失。 1}}将这两个调用更改为刷新并关闭bout
,您的问题将得到解决。
顺便说一下,这个:
catch(Exception e){
}
是最高级别的编程罪,也是许多难以诊断的问题的根源 - 这次不是这个问题,但是很冷。如果在传输过程中出现问题,将默默忽略错误消息。不要这样做 - 你永远不要这样做。
答案 1 :(得分:1)
空捕获块通常不是一个好主意,可以隐藏症状。
Change:
catch(Exception e){
}
To:
catch(Exception e){
e.printStackTrace();
}
答案 2 :(得分:0)
当然可以下载.jar。
如果你成功下载了一个.exe(它只是一个字节的二进制流,任意长度),那么我不知道你为什么遇到.jar问题(这也只是二进制流)。从数据流的角度来看,这两者应该是100%$等价物。我的猜测是.exe只是似乎才能工作......但实际上你没有复制部分或全部文件。
最后,值得注意的是“.jar”文件实际上是一个“.zip”文件。您可以将流包装在内置的Zip类中,并在读取文件时直接 interpet .jar内容。如果你愿意的话。
建议:
检查您复制的.exe的文件大小和/或校验和。尝试几个不同大小的.exe。如果您对.exe正确复制感到满意,我向您保证.jar也可以正常工作。
答案 3 :(得分:0)
研究了这个简单的代码,适用于windows系统 而对于mac或其他你需要改变:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.nio.channels.Channels;
import java.nio.channels.FileChannel;
import java.nio.channels.ReadableByteChannel;
import java.nio.charset.MalformedInputException;
import java.util.Scanner;
import org.apache.commons.io.FileUtils;
/**
*
* @author aleem
*/
public class Get {
public static void main (String[] args) throws IOException, InterruptedException {
/**Change the url with your jar file url**/
String fileUrl = "http://elambak.com/Supported.jar";
/**Assign any name to this newly downloaded file with destination location if required **/
String destinationFile = "abc1.jar";
saveFile(fileUrl, destinationFile);
}
public static void saveFile(String fileUrl, String destinationFile) throws IOException {
int BUFFER_SIZE = 4096;
URL url = new URL(fileUrl);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
/** This user agent is using for windows for other OS need to change **/
httpConn.setRequestProperty("User-Agent", " Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)");
int responseCode = httpConn.getResponseCode();
String disposition = httpConn.getHeaderField("Content-Disposition");
String contentType = httpConn.getContentType();
int contentLength = httpConn.getContentLength();
InputStream is = httpConn.getInputStream();
OutputStream os = new FileOutputStream(destinationFile);
int bytesRead = -1;
byte[] buffer = new byte[BUFFER_SIZE];
while ((bytesRead = is.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
}
}