簡體   English   中英

用java從服務器下載文件

[英]Download file from server in java

在我的 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...!!");}
    }
   } 

但是這個下載很慢。 我怎樣才能讓它快?

從 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 內容傳輸到沒有任何 3rd 方庫的文件。 如果它仍然很慢,您就知道這不是附加庫的錯,也很可能不是 Java 的錯。 至少這里沒有什么可以改進的。 那么你應該在JVM之外尋找原因。

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

這應該很快!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM