我有这个DownloadFile.java
,并应下载文件:
import java.io.*;
import java.net.URL;
public class DownloadFile {
public static void main(String[] args) throws IOException {
String fileName = "setup.exe";
// The file that will be saved on your computer
URL link = new URL("http://onlinebackup.elgiganten.se/software/elgiganten/setup.exe");
// The file that you want to download
// Code to download
InputStream in = new BufferedInputStream(link.openStream());
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int n = 0;
while (-1 != (n = in.read(buf))) {
out.write(buf, 0, n);
}
out.close();
in.close();
byte[] response = out.toByteArray();
FileOutputStream fos = new FileOutputStream(fileName);
fos.write(response);
fos.close();
// End download code
System.out.println("Finished");
}
}
我想从
Gui.java
中的鼠标事件执行此操作。private void jLabel17MouseClicked(java.awt.event.MouseEvent evt){
}
我该怎么做呢?
最佳答案
您当前的方法是静态方法,可以,但是它提取的所有数据都紧紧地保存在main方法中,从而防止了其他类使用它,但是幸运的是,可以对此进行更正。
我的建议:
重新编写DownloadFile代码,这样它不仅是静态的main方法,而且可以被其他类轻松调用,并且可以从目标文件中返回数据。这样,外部类可以调用该方法,然后接收该方法提取的数据。
给它一个String参数,它将允许调用代码传递URL地址。
给它一个应该向其写入数据的文件的File参数。
如果调用程序需要此数据,请考虑使其返回数据(字节数组?)。
或者,如果不需要返回数据,则可能返回布尔值以指示下载是否成功。
确保您的方法抛出需要抛出的所有异常(例如IO和URL异常)。
另外,如果要由Swing GUI调用此代码,请确保在后台线程(例如在SwingWorker中)调用这种类型的代码,以使该代码不会占用Swing事件线程,从而使GUI冻结为一个时间。