Java: 使用jCIFS存取遠端網路磁碟機的檔案
使用遠端的NAS當做網路磁碟機時,會遇到一個狀況:若AP Server以服務的形式啟動時,會抓不到網路磁碟機。有兩個方法可以解決程式存取網路磁碟機的狀況。
方法1. 設定服務的登入帳戶
AP Server服務的登入帳戶不要使用預設的「本機系統帳戶」,以登入NAS的帳號、密碼來建立本機帳戶,再將服務的登入帳戶變更為此新建帳戶,則程式裡就能以UNC的方式存取網路磁碟機(如 \\192.168.0.1\share\doc)。
方法2. 使用jCIFS套件
jCIFS是CIFS(Common Internet File System)的Java實作,以smb://通訊協定來溝通Windows與Linux(Samba)。使用紀要如下:
1.登入NAS,先建立NTLM認證:
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null, 帳號, 密碼);
2.列出遠端的檔案清單
String remoteURL = "smb://192.168.0.1/share/doc"; SmbFile dir = new SmbFile(remoteURL, auth); for (SmbFile f : dir.listFiles()) { System.out.println("File name: " + f.getName()); }
3. 將遠端檔案存入本地磁碟
SmbFile smbFile = new SmbFile("smb://192.168.0.1/share/doc/test1.doc", auth); SmbFileInputStream inputSmbFile = null; FileOutputStream outputFile = null; try { String filename = smbFile.getName(); inputSmbFile = new SmbFileInputStream(smbFile); outputFile = new FileOutputStream(new File(destDir + filename)); while ((len = inputSmbFile.read(buf)) > 0) { outputFile.write(buf, 0, len); } } catch (IOException e) { e.printStackTrace(); } finally { if (inputSmbFile != null) inputSmbFile.close(); if (outputFile != null) outputFile.close(); }
4. 將本地檔案存入遠端
SmbFileOutputStream outputSmbFile = null; FileInputStream inputFile = null; try { File file = new File(sSrcFile); String filename = file.getName(); SmbFile smbFile = new SmbFile(sRemoteURL_ + filename, auth); outputSmbFile = new SmbFileOutputStream(smbFile); inputFile = new FileInputStream(file); while ((len = inputFile.read(buf)) > 0) { outputSmbFile.write(buf, 0, len); } } catch (IOException e) { e.printStackTrace(); } finally { if (outputSmbFile != null) outputSmbFile.close(); if (inputFile != null) inputFile.close(); }
##
您可能也會有興趣的類似文章
- JSP快速產生Excel內容的方法 (0則留言, 2015/07/15)
- Java: 討人厭的SOAP Web Service;使用SoapUI解決 (0則留言, 2015/05/31)
- Java的資料型態與簡單的計算機程式 (IDEA #8) (0則留言, 2019/08/25)
- Servlet 3.0的檔案上傳寫法 (2則留言, 2012/06/19)
- 以Scribe-java實作Google OAuth 2.0的認證機制 (0則留言, 2013/02/19)
- 用IntelliJ IDEA寫第一支Java程式;程式結構說明;Live Tempate用法(IDEA #4) (0則留言, 2019/08/09)
- Java十年有成 (0則留言, 2005/04/12)
- 解決 iReport 升級後的問題 (1則留言, 2005/11/22)
- [轉貼CNet] 開原碼Java工具熱 昇陽能否突圍? (0則留言, 2005/06/30)
- Java I18N國際化工具:JRC-Editor (0則留言, 2008/03/01)
- IntelliJ IDEA Live Template(即時樣板)的使用與範例說明(IDEA #5) (0則留言, 2019/08/11)
- Java JDK支援TLS的版本彙總 (0則留言, 2022/10/05)
- [Java] JBuilder reportedly migrating to Eclipse? (1則留言, 2005/04/23)
- 由Java原始碼產生類別使用文件:產生Javadoc的步驟 (IDEA #9) (0則留言, 2019/08/25)
- [Windows] 刪除特定Java process的方法 (0則留言, 2017/08/02)
Sorry, 很久沒用Google sc…