2011-09-04 121 views
2

我只是想知道如何使用java壓縮網上的文件,當然。Java - 從網站壓縮文件?

我知道如何爲硬盤驅動器上的目錄做到這一點,而不是網站:

ZipFile zipfile = new ZipFile("C:/Documents and Settings/User/desktop/something.file"); 

非常感謝你。

+0

你是什麼意思「在網上的文件」?就像你通過一個'HttpUrlConnection'從一個刪除網站收到的東西? –

+0

基本上,不是壓縮位於硬盤驅動器上的文件 - 我希望它從網絡服務器壓縮文件,給定http://blahblablah.com/file.txt的地址(這是我的意思是「從網絡「)。 – john

+1

如果你的意思是你想在Web服務器上壓縮文件併發送到你的程序已經壓縮,那麼你不能。服務器需要爲您做這件事,並將壓縮文件發送給您。你的問題並不清楚。 –

回答

0

這是相同的,但你必須使用兩個方法:

String filePath = getServletContext().getRealPath("/WEB-INF/your_folder/your_file"); 

filepath是絕對的文件系統路徑(C:/.../ WEB-INF /您的文件夾/ your_file)

+0

呃,那不是我想要做的。顯然該文件需要是JAR文件?不過,是不是有更簡單的方法來從網絡服務器壓縮文件?而不是從你的驅動器。 – john

1

所以我認爲你要下載和壓縮一個文件。這是兩個不同的任務,所以你需要兩樣東西做到這一點:

  • 東西,從網絡上下載的文件
  • 東西把它壓縮成zip文件

我建議你使用Apache HttpComponents下載該文件,Apache Compress將其壓縮。

然後代碼會去這樣的事情...

// Obtain reference to file 
    HttpGet httpGet = new HttpGet("http://blahblablah.com/file.txt"); 
    HttpResponse httpResponse = httpclient.execute(httpGet); 
    HttpEntity httpEntity = httpResponse.getEntity(); 

    // Create the output ZIP file 
    ZipArchiveOutputStream zip = new ZipArchiveOutputStream(zipFile); 

    try { 
     // Write a file header in the .zip file 
     ArchiveEntry entry = new ZipArchiveEntry("file.txt"); 
     zip.putArchiveEntry(entry); 

     // Download the file and write it to a compressed file 
     IOUtils.copy(httpEntity.getContent(), zip); 

     // The file is now written 
     zip.closeArchiveEntry(); 
    } finally { 
     // Ensure output file is closed 
     zip.close(); 
    } 

它是如何工作的? HttpComponents正在獲取文件的InputStream,並且Compress正在提供OutputStream。那麼你只是從一個流複製到另一個流。這就像魔術一樣!