1. 程式人生 > >jcifs 詳解讀取網路共享檔案資料

jcifs 詳解讀取網路共享檔案資料

時隔1年半,沒有發過新的帖子了,也沒怎麼來過CSDN逛逛了,人也懶散了。

今天收到網友的提問,才回來看看,覺得應該再寫點什麼出來,不過,發現自己研究是不是太深入,寫不出那麼高深的東西,那就寫點膚淺的東西吧。

找來找去,想到寫jcifs讀取網路共享檔案資料,先百度了一下,發現到處都是copy,而且不夠詳細,有些細節的地方沒有注意到,所以寫在下篇部落格。(啊喂,是不是有點囉嗦了。。)

好,那麼開始吧,先介紹一下jcifs:

CIFS (Common Internet File System) 

通用Internet檔案系統

  在windows主機之間進行網路檔案共享是通過使用微軟公司自己的CIFS服務實現的。 

  CIFS 是一個新提出的協議,它使程式可以訪問遠端Internet計算機上的檔案並要求此計算機的服務。CIFS 使用客戶/伺服器模式。客戶程式請求遠在伺服器上的伺服器程式為它提供服務。伺服器獲得請求並返回響應。CIFS是公共的或開放的SMB協議版本,並由Microsoft使用。SMB協議(見最後的名詞解釋)現在是區域網上用於伺服器檔案訪問和列印的協議。象SMB協議一樣,CIFS在高層執行,而不象TCP/IP協議那樣執行在底層。CIFS可以看做是應用程式協議如檔案傳輸協議和超文字傳輸協議的一個實現。

(轉載的,人家也是轉載的,沒標明出處╮(╯▽╰)╭)。

下面還是來擅長的程式碼吧.

第一步:搞清楚你所有讀取的共享檔案的目錄結構及IP地址,如果需要使用者許可權的話,那麼你就要知道使用者名稱和密碼是多少。

例1:smb://userName:[email protected]/filePath(這種情況是需要使用者名稱密碼的情況下輸入的條件)

例2:smb://ip/filePath(這種情況是不需要使用者名稱和密碼的)

注意:需不需要使用者名稱密碼這是必須要知道的,不然無法讀取,可以自己測試一下,(ctrl+r 輸入://192.168.0.12 回車,如果需要賬戶名密碼的話,會彈出一個對話方塊的)

第二步:提供本地儲存檔案的地址目錄;

例:E://12 (資料夾必須事先建立好,或者在程式中建立)

接下來上程式碼:

//獲取客戶端所有EXP檔案
List<String> fileNames = Smb.getFileNamesFromSmb("smb://Administrator:
[email protected]
/share/"); for (String fileName : fileNames) { File file = Smb.readFromSmb("smb://Administrator:[email protected]/share/"+fileName,"E://138"); }
這裡就獲得到了共享資料夾下面的所有檔案了,這樣寫的目的在於可以再for迴圈中根據檔名稱過濾掉一些已經獲取到的,我這裡把過濾的程式碼去掉了,也就是一個if判斷而已.

下面是Smb類的程式碼:

package com.genertech.unit;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;

import jcifs.smb.SmbException;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;

public class Smb {
	public static List<String> getFileNamesFromSmb(String smbMachine){
		SmbFile file;
		SmbFile[] files = null;
		try {
			file = new SmbFile(smbMachine);
			files = file.listFiles();
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (SmbException e) {
			e.printStackTrace();
		}
		List<String> fileNames = new ArrayList<String>();
		for (SmbFile smbFile : files) {
			if(smbFile.getName().indexOf(".EXP")!=-1){
				fileNames.add(smbFile.getName());
			}
		}
		return fileNames;
	}
	/**
     * 從smbMachine讀取檔案並存儲到localpath指定的路徑
     * 
     * @param smbMachine
     *            共享機器的檔案,如smb://xxx:[email protected]/myDocument/測試文字.txt,xxx:xxx是共享機器的使用者名稱密碼
     * @param localpath
     *            本地路徑
     * @return
     */
	public static File readFromSmb(String smbMachine,String localpath){
        File localfile=null;
        InputStream bis=null;
        OutputStream bos=null;
        List<File> files = new ArrayList<>();
        try {
            SmbFile rmifile = new SmbFile(smbMachine);
        	String filename=rmifile.getName();
            bis=new BufferedInputStream(new SmbFileInputStream(rmifile));
            localfile=new File(localpath+File.separator+filename);
            bos=new BufferedOutputStream(new FileOutputStream(localfile));
            int length=rmifile.getContentLength();
            byte[] buffer=new byte[length];
            bis.read(buffer);
            bos.write(buffer);
            try {
                bos.close();
                bis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            files.add(localfile);
        } catch (Exception e) {
        	e.printStackTrace();
        }
        return localfile;
    }
    public static boolean removeFile(File file) {
        return file.delete();
    }
}

大概就這些,中間大家可以根據自己的需要加上一些其他的功能,有問題請留言。

jcifs可從http://jcifs.samba.org/下載;

相關推薦

jcifs 讀取網路共享檔案資料

時隔1年半,沒有發過新的帖子了,也沒怎麼來過CSDN逛逛了,人也懶散了。 今天收到網友的提問,才回來看看,覺得應該再寫點什麼出來,不過,發現自己研究是不是太深入,寫不出那麼高深的東西,那就寫點膚淺的東西吧。 找來找去,想到寫jcifs讀取網路共享檔案資料,先百度了一下,發現

【python資料探勘課程】二十.KNN最近鄰分類演算法分析及平衡秤TXT資料讀取

這是《Python資料探勘課程》系列文章,也是我這學期上課的部分內容及書籍的一個案例。本文主要講述KNN最近鄰分類演算法、簡單實現分析平衡秤資料集,希望這篇文章對大家有所幫助,同時提供些思路。內容包括:

Linux常用命令示例(一)-檔案管理

1、touch 命令 使用說明: Linux touch命令用於修改檔案或者目錄的時間屬性,包括存取時間和更改時間。若檔案不存在,系統會建立一個新的檔案。 使用語法: touch [-acfm][-d<日期時間>][-r<參考檔案或目錄>

圖文網路程式設計!

1.網路程式設計 什麼是網路程式設計 多臺計算機連線形成網路 網路的作用 資料互動 資料共享 2.網路三要素 網路協議:雙方實體完成通訊或服務所必須遵循的規則和約定  &

C# 網路程式設計系列:實現類似QQ的即時通訊程式

https://www.jb51.net/article/101289.htm   引言: 前面專題中介紹了UDP、TCP和P2P程式設計,並且通過一些小的示例來讓大家更好的理解它們的工作原理以及怎樣.Net類庫去實現它們的。為了讓大家更好的理解我們平常中常見的軟體QQ的工作原理,所以在本專題

Java InputStream讀取網路響應Response資料的方法

Java InputStream讀取資料問題 ====================================================================== 原理講解  1. 關於InputStream.read()   &n

一文matplotlib的配置檔案以及配置方式

歡迎關注“勇敢AI”公眾號,更多python學習、資料分析、機器學習、深度學習原創文章與大家分享,還有更多電子資源、教程、資料集下載。勇敢AI,一個專注於人工智慧AI的公眾號。 ===================================================

wordpress如何把檔案儲存到阿里雲OSS上!

自己搞了一個Wordpress的部落格,裝完之後一直晾著沒管,最近閒來開荒。為了減小伺服器的頻寬、儲存、CUP的壓力,決定把部落格中的所有檔案都儲存到阿里雲OSS上面。 關於這個問題,自己去呼叫OSS的SDK然後再去修改wordpress這種方式肯定是費時又費力,哪怕是你閒得蛋疼也不會這麼幹,何況是忙到蛋疼

例題SQL語句-資料庫基本操作6-資料型別拓展

1.3 資料型別——列舉(enum) 1、從集合中選擇一個數據(單選) mysql> create table t8( -> name varchar(20), -> sex enum('男','女','保密')

例題SQL語句-資料庫基本操作7-資料型別拓展

| 1.6 資料型別——boolean MySQL不支援boolean型別,true和false在資料庫中對應1和0。 mysql> create table t15( -> field boolean -> ); Query

LVS原理 && 配置檔案引數

LVS原理詳解   LVS原理詳解 LVS簡介 LVS結構與工作原理 一.LVS的結構 二.LVS核心模型 三.LVS的包轉發模型 1.NAT模型: 2.DR模型:

Siamese網路

摘要 Siamese網路用途,原理,如何訓練? 背景 在人臉識別中,存在所謂的one-shot問題。舉例來說,就是對公司員工進行人臉識別,每個員工只給你一張照片(訓練集樣本少),並且員工會離職、入職(每次變動都要重新訓練模型)。有這樣的問題存在,就沒辦法直接訓練

django三種檔案下載方式

推薦使用FileResponse,從原始碼中可以看出FileResponse是StreamingHttpResponse的子類,內部使用迭代器進行資料流傳輸。 在實際的專案中很多時候需要用到下載功能,如導excel、pdf或者檔案下載,當然你可以使用web服務自己搭建可以用於下載的資源伺服器, 如nginx

讀取網路TXT檔案內容解決中文亂碼

 private String getServerVersion(final String urlStr) {      new Thread(){         

JS中的基本資料型別和引用資料型別

ECMAScript變數可能包含兩種不同型別的值:基本型別值和引用型別值。基本型別值指的是簡單的資料段,而引用型別值指那些可能由多個值構成的物件。 在將一個值賦值給變數時,解析器必須確定這個值是基本型別值還是引用型別值 js的六大資料型別:Number, String,

Linux核心中RAID5原始碼之基本架構與資料結構

Linux核心中RAID5的基本架構與資料結構解析 眾所周知,早年的計算機儲存資料現在磁帶上,然後發展到了磁碟,然而僅僅是單個盤,速度和效能都不是很好,然是,要知道人類的聰明才智是連ET都想不到的,前輩們不斷的猜想,實驗來提高計算機的效能,於是磁碟陣列問世

PHP檔案上傳操作例項(包含上傳檔案型別MIME驗證)

本文例項分析了PHP檔案上傳操作。分享給大家供大家參考,具體如下: 檔案上傳 發生在瀏覽器向伺服器發出的請求中。 檔案,對於瀏覽器來講,就是表單中的一個特殊型別的資料而已。 瀏覽器表單中的資料,兩種型別: 字串型別(位元組流編碼) 檔案型別(二進位制編碼),檔案是表單資料中

輕量級深度學習網路(五):輕量級網路Xception

 一、簡介 Xception並不是真正意義上的輕量化模型,只是其借鑑depth-wise convolution,而depth-wise convolution又是上述幾個輕量化模型的關鍵點,所以在此一併介紹,其思想非常值得借鑑。 Xception是Google提出的,a

Storm Grouping機制(包含兩篇參考資料)

參考資料1: shuffleGrouping 將流分組定義為混排。這種混排分組意味著來自Spout的輸入將混排,或隨機分發給此Bolt中的任務。shuffle grouping對各個task的tuple分配的比較均勻。 fieldsGrouping 這種grouping

elastic-job(一):資料分片

資料分片的目的在於把一個任務分散到不同的機器上執行,既可以解決單機計算能力上限的問題,也能降低部分任務失敗對整體系統的影響。elastic-job並不直接提供資料處理的功能,框架只會將分片項分配至各個執行中的作業伺服器(其實是Job例項,部署在一臺機器上的多個Job例項也