java 從伺服器下載檔案並儲存到本地
阿新 • • 發佈:2019-01-10
最近在做專案,做到檔案的下載,假設公司有檔案伺服器(像ftp或者其他),像開發人員怎麼進行從檔案伺服器上下載檔案到本地指定目錄下!又或者需要從網上下載資源到本地指定的目錄下,這時候最需要關心的幾個問題就是:
(1)客戶端發起一個url請求,獲取連線物件。 (2)伺服器解析url,並且將指定的資源返回一個輸入流給客戶。 (3)建立儲存的目錄以及儲存的檔名。 (4)輸出了寫資料。 (5)關閉輸入流和輸出流。 程式碼實現: 我以struts2為例子,我們可以先建立一個檔案下載工具類,這樣方便呼叫,再在action的類方法裡面去呼叫這個工具類中方法! 一、先是工具類DownLoadUtil.java,程式碼如下:二、action中的實現方法程式碼:import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; public class DownLoadUtil { //downLoadThingName是要從遠端網站或者伺服器上下載檔案的命名 public static File saveUrlAs(String url, String filePath,String downLoadThingName, String method) { // System.out.println("fileName---->"+filePath); // 建立不同的資料夾目錄 File file = new File(filePath); // 判斷資料夾是否存在 if (!file.exists()) { // 如果資料夾不存在,則建立新的的資料夾 file.mkdirs(); } FileOutputStream fileOut = null; HttpURLConnection conn = null; InputStream inputStream = null; try { // 建立連結 URL httpUrl = new URL(url); conn = (HttpURLConnection) httpUrl.openConnection(); // 以Post方式提交表單,預設get方式 conn.setRequestMethod(method); conn.setDoInput(true); conn.setDoOutput(true); // post方式不能使用快取 conn.setUseCaches(false); // 連線指定的資源 conn.connect(); // 獲取網路輸入流 inputStream = conn.getInputStream(); BufferedInputStream bis = new BufferedInputStream(inputStream); // 判斷檔案的儲存路徑後面是否以/結尾 if (!filePath.endsWith("/")) { filePath += "/"; } // 寫入到檔案(注意檔案儲存路徑的後面一定要加上檔案的名稱) fileOut = new FileOutputStream(filePath + downLoadThingName); BufferedOutputStream bos = new BufferedOutputStream(fileOut); byte[] buf = new byte[4096]; int length = bis.read(buf); // 儲存檔案 while (length != -1) { bos.write(buf, 0, length); length = bis.read(buf); } bos.close(); bis.close(); conn.disconnect(); } catch (Exception e) { e.printStackTrace(); System.out.println("丟擲異常!!"); } return file; }
三、struts.xml中的action配置,只需指定method方法為docDown, 其他的result、param不需要!public String docDown() throws Exception{ Document document= documentDao.tokeDoc(docId);//這裡是從資料庫查詢出的文件物件,要根據自己情況自行建立 String docUrl = "http://seopic.699pic.com/photo/50078/6395.jpg_wh1200.jpg";//這裡可以加上自己的檔名稱變數,如:document.getDocumentName() //String fileName = docUrl.substring(docUrl.lastIndexOf("/"));這裡會建立6395.jpg_wh1200.jpg資料夾 String fileName = "downLoad"; String filePath = "d:/"; File file = DownLoadUtil.saveUrlAs(docUrl, filePath + fileName,document.getDocumentName(), "GET"); System.out.println("Run ok!/Get URL file " + file); return null; }
其中有些程式碼是根據別人改寫而來的!文中有啥不對的地方,歡迎大家指正!