5

在我的 java 应用程序中,我使用以下方法从服务器下载文件。

public void kitapJar(){
    File f = new File("C:/PubApp_2.0/update/lib/kitap.jar");
    try{

    URL kitap = new URL("http://example.com/update/PubApp_2.0.jar");
    org.apache.commons.io.FileUtils.copyURLToFile(kitap, f);   
    }
    catch(IOException ex){
    System.out.println("Error...!!");}
    }
   } 

但是这个下载速度很慢。我怎样才能让它快点?

4

2 回答 2

20

从 Java 7 开始,您可以下载具有内置功能的文件,如下所示

Files.copy(
    new URL("http://example.com/update/PubApp_2.0.jar").openStream(),
    Paths.get("C:/PubApp_2.0/update/lib/kitap.jar"));
// specify StandardCopyOption.REPLACE_EXISTING as 3rd argument to enable overwriting

对于早期版本,从 Java 1.4 到 Java 6 的解决方案是

try(
  ReadableByteChannel in=Channels.newChannel(
    new URL("http://example.com/update/PubApp_2.0.jar").openStream());
  FileChannel out=new FileOutputStream(
    "C:/PubApp_2.0/update/lib/kitap.jar").getChannel() ) {

  out.transferFrom(in, 0, Long.MAX_VALUE);
}

此代码将 URL 内容传输到没有任何第三方库的文件。如果它仍然很慢,您就知道这不是附加库的问题,而且很可能不是 Java 的错。至少这里没有什么可以改进的。那么你应该在JVM之外搜索原因。

于 2013-09-18T14:03:28.027 回答
0

从 Java 8 开始,您可以这样做:

    ReadableByteChannel readChannel = Channels.newChannel(new URL("http://example.com/update/PubApp_2.0.jar").openStream());
    FileOutputStream fileOS = new FileOutputStream("C:\\PubApp_2.0\\update\\lib\\kitap.jar");
    FileChannel writeChannel = fileOS.getChannel();
    writeChannel
            .transferFrom(readChannel, 0, Long.MAX_VALUE);

这应该很快!

于 2020-10-01T10:44:49.063 回答