我正在使用此代码从互联网上下载文件。
void download(String source, String destination, int size) {
// ten percent of the total download size
File ofile = new File(System.getProperty("user.dir") + "", destination);
System.out.printf("\nDownloading\n\t%s\nTo\n\t%s\n", source, destination);
try {
if (ofile.exists()) ofile.delete();
if (!ofile.createNewFile()) {
throw new IOException("Can't create " + ofile.getAbsolutePath());
}
int inChar = 0;
URL url = new URL(source);
InputStream input = url.openStream();
FileOutputStream fos = new FileOutputStream(ofile);
for (int i = 0; i < size && inChar != -1; i++) {
inChar = input.read();
fos.write(inChar);
}
input.close();
fos.close();
System.out.println("Downloaded " + ofile.getAbsolutePath());
} catch (EOFException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main frame = new Main();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
然后我用另一段代码运行更新的程序:
public Main() {
needDownload();
if (needDownload){
download("http://www.endcraft.net/webstart/privateers.jar", "privateers.jar",6550225);
try {
String exec = (System.getProperty("user.dir") + "\\privateers.jar");
String[] command = {"javaw", "-jar", exec};
final Process process = Runtime.getRuntime().exec(command);
System.out.println("Running " + exec);
//System.exit(0);
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
但是,下载的jar似乎已损坏。
"Error or invalid corrupt file /path/privateers.jar"
当我右键单击实际文件并点击“run with java”(程序之外)时,它也会抛出相同的错误。
但是,当我直接从我的FTP服务器而不是从我的应用程序下载它时,它可以正常工作并且不会以任何方式损坏。
我该如何解决这个问题?
谢谢!
答案 0 :(得分:1)
添加最后一行:
final Process process = Runtime.getRuntime().exec(command);
System.out.println("Running " + exec);
process.waitFor();
强烈建议,如果使用jar是下一步要做的事情。下载可能需要几秒钟。
答案 1 :(得分:0)
尝试使用
File file = new File("FileName.jar");
FileOutputStream fileOut = new FileOutputStream(file);
并附加你的inChar
并在for循环后立即写入:
for (int i = 0; i < size && inChar != -1; i++) {
// append
}
fos.write(inChar);