Java讀寫Windows共享文件夾的方法實(shí)例
項(xiàng)目常常需要有訪問共享文件夾的需求,例如共享文件夾存儲(chǔ)照片、文件等。那么如何使用Java讀寫Windows共享文件夾呢?
Java可以使用JCIFS框架對(duì)Windows共享文件夾進(jìn)行讀寫,就這個(gè)框架可以讓我們像訪問本地文件夾一下訪問遠(yuǎn)程文件夾。
JCIFS的網(wǎng)址: http://jcifs.samba.org/
JCIFS是使用純Java開發(fā)的一個(gè)開源框架,通過(guò)smb協(xié)議訪問遠(yuǎn)程文件夾。該框架同時(shí)支持Windows共享文件夾和Linux共享文件夾,不過(guò),Linux共享文件夾需要安裝Samba服務(wù)軟件(官網(wǎng):http://www.samba.org/)。
SMB(Server Messages Block,信息服務(wù)塊)是一種在局域網(wǎng)上共享文件和打印機(jī)的一種通信協(xié)議,它為局域網(wǎng)內(nèi)的不同計(jì)算機(jī)之間提供文件及打印機(jī)等資源的共享服務(wù)。SMB協(xié)議是客戶機(jī)/服務(wù)器型協(xié)議,客戶機(jī)通過(guò)該協(xié)議可以訪問服務(wù)器上的共享文件系統(tǒng)、打印機(jī)及其他資源。通過(guò)設(shè)置“NetBIOS over TCP/IP”使得Samba不但能與局域網(wǎng)絡(luò)主機(jī)分享資源,還能與全世界的電腦分享資源。
本文主要學(xué)習(xí)一下使用Java訪問Windows共享文件夾的方法。
首先找一臺(tái)Windows機(jī)器,在任意位置創(chuàng)建文件夾:sharedFolder,并設(shè)置為共享,設(shè)置共享用戶名:share,密碼:admin。
(Windows7下設(shè)置共享文件夾方法:Windows7下設(shè)置共享文件夾方法:http://www.dhdzp.com/os/windows/78034.html)
不論是Windows還是Linux的共享文件夾,使用Java smb訪問共享文件夾的代碼都是一樣的,只是Windows與Linux配置共享文件夾的方式不一樣。
測(cè)試代碼如下:
InputStream in = null;
OutputStream out = null;
try {
//獲取圖片
File localFile = new File("C:/testjpg");
String remotePhotoUrl = "smb://share:admin@11/sharedFolder/"; //存放圖片的共享目錄
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmssSSS_");
SmbFile remoteFile = new SmbFile(remotePhotoUrl + "/" + fmtformat(new Date()) + localFilegetName());
remoteFileconnect(); //嘗試連接
in = new BufferedInputStream(new FileInputStream(localFile));
out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));
byte[] buffer = new byte[4096];
int len = 0; //讀取長(zhǎng)度
while ((len = inread(buffer, 0, bufferlength)) != -1) {
outwrite(buffer, 0, len);
}
outflush(); //刷新緩沖的輸出流
}
catch (Exception e) {
String msg = "發(fā)生錯(cuò)誤:" + egetLocalizedMessage();
Systemoutprintln(msg);
}
finally {
try {
if(out != null) {
outclose();
}
if(in != null) {
inclose();
}
}
catch (Exception e) {}
}
以上代碼中,使用了JCIFS框架提供的SmbFile類,這個(gè)類和Java的File類比較相似,使用這個(gè)類的對(duì)象,可以處理遠(yuǎn)程文件的讀寫。使用File對(duì)象讀取本地文件,然后使用SmbFile對(duì)象寫入遠(yuǎn)程文件。SmbFile的connect()方法可以嘗試連接遠(yuǎn)程文件夾,如果賬號(hào)或密碼錯(cuò)誤,將拋出連接異常。
當(dāng)下載遠(yuǎn)程文件時(shí),使用SmbFile對(duì)象讀取遠(yuǎn)程文件即可,代碼如下:
InputStream in = null ;
ByteArrayOutputStream out = null ;
try {
//創(chuàng)建遠(yuǎn)程文件對(duì)象
String remotePhotoUrl = "smb://share:admin@11/sharedFolder/testjpg";
SmbFile remoteFile = new SmbFile(remotePhotoUrl);
remoteFileconnect(); //嘗試連接
//創(chuàng)建文件流
in = new BufferedInputStream(new SmbFileInputStream(remoteFile));
out = new ByteArrayOutputStream((int)remoteFilelength());
//讀取文件內(nèi)容
byte[] buffer = new byte[4096];
int len = 0; //讀取長(zhǎng)度
while ((len = inread(buffer, 0, bufferlength)) != - 1) {
outwrite(buffer, 0, len);
}
outflush(); //刷新緩沖的輸出流
return outtoByteArray();
}
catch (Exception e) {
String msg = "下載遠(yuǎn)程文件出錯(cuò):" + egetLocalizedMessage();
Systemoutprintln(msg);
}
finally {
try {
if(out != null) {
outclose();
}
if(in != null) {
inclose();
}
}
catch (Exception e) {}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java?實(shí)戰(zhàn)范例之校園二手市場(chǎng)系統(tǒng)的實(shí)現(xiàn)
讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+mysql+maven+tomcat實(shí)現(xiàn)一個(gè)校園二手市場(chǎng)系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-11-11
通過(guò)FeignClient如何獲取文件流steam?is?close問題
這篇文章主要介紹了通過(guò)FeignClient如何獲取文件流steam?is?close問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
基于resty orm的ActiveRecord操作數(shù)據(jù)指南
這篇文章主要為大家介紹了基于resty orm的ActiveRecord操作數(shù)據(jù)指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03
Java發(fā)送form-data請(qǐng)求的實(shí)例代碼
在Java中發(fā)送form-data請(qǐng)求,可以使用Apache?HttpClient或OkHttp這樣的HTTP客戶端庫(kù)來(lái)發(fā)送請(qǐng)求,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-10-10
SpringBoot+Ajax+redis實(shí)現(xiàn)隱藏重要接口地址的方法
這篇文章主要介紹了SpringBoot+Ajax+redis實(shí)現(xiàn)隱藏重要接口地址,本篇文章主要講訴使用SpringBoot項(xiàng)目配合Ajax和redis實(shí)現(xiàn)隱藏重要接口地址,這里我以隱藏秒殺地址為例,需要的朋友可以參考下2024-03-03
解決idea報(bào)錯(cuò) Connot resolve column 的問題
這篇文章主要介紹了解決idea報(bào)錯(cuò) Connot resolve column 的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
Nacos源碼之注冊(cè)中心的實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了Nacos源碼之注冊(cè)中心的實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
不使用他人jar包情況下優(yōu)雅的進(jìn)行dubbo調(diào)用詳解
這篇文章主要為大家介紹了不使用他人jar包情況下優(yōu)雅的進(jìn)行dubbo調(diào)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09

