1. 程式人生 > >SMB共享資料夾操作

SMB共享資料夾操作

最近接到了要獲取其他伺服器上檔案操作的需求,使用了網路共享資料夾的形式來進行處理。

首先在伺服器上設定一個資料夾為共享資料夾,這裡使用了碟符G:

之後在本地我的電腦下郵件生成一個網路位置,輸入ip所在:例子:\\172.17.16.16\G,取一個別名,例子為g;

之後即可通過這個目錄操作遠端的資料夾,記得設定許可權為完全控制。

貼一下主要的兩個工具類的方法:

package com.neusoft.jkysjbs.action.comm;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.OutputStream;

import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
import jcifs.smb.SmbFileOutputStream;

public class SmbFileTransfer {

  /* 
   * smb類 用於對共享資料夾的檔案進行上傳下載使用,直接使用file類不能獲取到相關的檔案物件
   * 
   */ 
    
    
    /**
     * 將本地檔案上傳到共享資料夾中
     */
     public static void smbUpload(String localDir,String remoteUrl) {
       InputStream in = null;
       OutputStream out = null;
       try {
           //獲取圖片
           File localFile = new File(localDir);
           SmbFile remoteFile = new SmbFile(remoteUrl + "/"  + localFile.getName());
           remoteFile.connect(); //嘗試連線

           in = new BufferedInputStream(new FileInputStream(localFile));
           out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));

           byte[] buffer = new byte[4096];
           int len = 0; //讀取長度
           while ((len = in.read(buffer, 0, buffer.length)) != -1) {
               out.write(buffer, 0, len);
           }
           out.flush(); //重新整理緩衝的輸出流
       }
       catch (Exception e) {
           String msg = "發生錯誤:" + e.getLocalizedMessage();
           System.out.println(msg);
       }
       finally {
           try {
               if(out != null) {
                   out.close();
               }
               if(in != null) {
                   in.close();
               }
           }
           catch (Exception e) {}

           
       }
   } 
 
        
     /**
      * 將檔案從共享資料夾中下載下來到本地
      * @param remoteUrl
      * @param localDir
      */
        public static void smbGet(String remoteUrl, String localDir) {
            InputStream in = null;
            OutputStream out = null;
            try {
            SmbFile remoteFile = new SmbFile(remoteUrl);
            if (remoteFile == null) {
            System.out.println("共享檔案不存在");
            return;
            }
            String fileName = remoteFile.getName();
            //建立資料夾(根目錄下直接建立檔案可以直接new File,如果是多層目錄下檔案的建立,需要先建立多層資料夾,然後用輸入流在資料夾相應目錄下再將檔案建立)
            File localFile = new File(localDir + File.separator);
            if(!localFile.exists()){//如果資料夾不存在
                //建立資料夾,mkdir是建立根目錄,mkdirs建立多層目錄
                localFile.mkdirs();
            }
            //建立檔案
            BufferedWriter bw=new BufferedWriter(new FileWriter(localDir + File.separator + fileName));
            bw.close();
            File localFiles =  new File(localDir + File.separator + fileName);
            in = new BufferedInputStream(new SmbFileInputStream(remoteFile));
            out = new BufferedOutputStream(new FileOutputStream(localFiles));
            byte[] buffer = new byte[1024];
            while (in.read(buffer) != -1) {
            out.write(buffer);
            buffer = new byte[1024];
            }
            } catch (Exception e) {
            e.printStackTrace();
            } finally {
            try {
            out.close();
            in.close();
            } catch (Exception e) {
            e.printStackTrace();
            }
            }
            }
        
        
        public static void main(String[] args) {
               //格式 smb://共享伺服器的使用者:密碼@ip/共享資料夾別名/其下目錄
            smbGet("smb://username:
[email protected]
/g/ftp/test.zip","E:/test/"); smbUpload("E:/test.zip","smb://username:[email protected]/g/ftp/"); } }

個人的思考是:SmbFile應該不是File的一個子類,很多方法相似,但並沒有繼承關係

而且應該有更簡便快捷的處理辦法,如果有人瞭解請在評論指教,多謝。

另外類似於在指定url下生成,壓縮檔案這種操作,使用smbFile做不到,多數用法也是上傳下載我的處理辦法是在本地生成好--傳上去--刪除本地,不得不說很粗糙,如果哪位大神有好辦法也請多指教,感謝閱讀。

相關推薦

SMB共享資料操作

最近接到了要獲取其他伺服器上檔案操作的需求,使用了網路共享資料夾的形式來進行處理。 首先在伺服器上設定一個資料夾為共享資料夾,這裡使用了碟符G: 之後在本地我的電腦下郵件生成一個網路位置,輸入ip所在:例子:\\172.17.16.16\G,取一個別名,例子為g; 之後

C# 操作共享資料

/// <summary> /// 共享檔案操作類 /// </summary> public class SharedFolderManager { public SharedFolderManager() { // //TODO: 在

smb讀取共享資料

SMB協議 SMB(Server Message Block)通訊協議是微軟(Microsoft)和英特爾(Intel)在1987年制定的協議,主要是作為Microsoft網路的通訊協議。SMB 是在會話層(session layer)和表示層(presentation la

centos 6.3 如何修改/etc/samba/smb.conf 檔案設定多個共享資料,一些是公開的,一些是需要認證的

第一節、samba是幹什麼的?它有什麼用? Samba(SMB是其縮寫) 是一個網路伺服器,它是Linux作為本地伺服器最重要的一個服務,用於Linux和Windows共享檔案之用;Samba可以用於Windows和Linux之間的共享檔案,也一樣用於Linux和Linux之間的共享檔案;不過對於L

linux 檔案及資料操作總結

文章目錄 檔案基本操作 檢視 複製刪除移動 建立 其他 許可權(包括資料夾) 檢視許可權 許可權含義 修改許可權 修改許可權(數字)

Ubuntu和Windows相互共享資料

一、Ubuntu訪問Windows共享資料夾 1、對需要共享資料夾右擊->屬性->共享 2、選擇要與其共享的使用者,選擇好使用者點選有點新增按鈕新增,然後點選下方的共享按鈕 3、完成共享 4、成功共享後可以在計算機管理檢視已共享資料夾 5、Windows還需要進行一些設定

windows清除訪問共享資料的登陸資訊

https://jingyan.baidu.com/article/c843ea0b70797e77931e4a96.html   當在命令提示視窗輸入net use命令時,會顯示本機快取的共享登入資訊,如果你想切換使用者,則可以刪除那條快取的記錄即可。   舉個例子,如上圖顯示,

用不同的使用者名稱和密碼登入網路上的共享資料

2014-05-20 22:49 by MikeZhou, 10697 閱讀, 0 評論, 收藏, 編輯 https://www.cnblogs.com/jinjiangongzuoshi/p/3740218.html 網路共享時,

Python檔案及資料操作

轉載自:http://www.cnblogs.com/feeland/         我們經常會與檔案和目錄打交道,對於這些操作,python可以使用 os 及 shutill 模組,其中包含了很多操作檔案和目錄的函式。     os 可以執行簡單的資料夾及檔案操作,引入用 &n

虛擬機器與主機互相ping通且共享資料,且虛擬機器連線外網

     在網上查詢了一天,感覺內容不是很完整,所以經過兩天無數次的失敗與摸索,終於完成了主機與虛擬機器互相ping通、共享資料夾且能連線外網,開心ing。虛擬機器版本為VirtualBox,linux版本為centos7。 1、虛擬機器與主機互相ping

在Ubuntu主機下實現與Windows虛擬機器共享資料

一.概述 由於要實現Ubuntu主機中的一些檔案與Windows虛擬機器共享,因此要建立一個共享資料夾對映到虛擬機器中. 網上許多都是Windows主機+Linux虛擬機器的配置,在此分享主機是Linux的. 主機:Ubuntu 桌面版18.04 虛擬機器:Virtual Box,Windows7

145_IO_File_常用方法_資料操作

常用方法_資料夾操作 Test04_DirMethod.java package _01.io.file; import java.io.File; import java.io.FilenameFilter; import java.util.Arrays;

shell指令碼實現相關文字和資料操作

shell指令碼實現某些文字/檔案和資料夾功能. 資料在指令碼的上層資料夾Data內,在scripts資料夾內執行該指令碼,按格式得到需要的event.cat檔案. 在此做一記錄, 以便以後檢視. #!/bin/bash #以要求格式生成event.cat #在資料檔案上一級目錄的src

區域網下 ubuntu和windows 共享資料

前言:實驗室環境下,筆記本網線連線路由器,桌上型電腦無線連線同一路由器訊號,兩個在同一網段。 按照資料操作,兩者可互傳資料。 ubuntu為16.04LTS       windows為win10 傳送門:https://blog.csdn.net/qq_1

Java使用SMBJ包從僅支援SMB2/SMB3協議的共享資料下載檔案

說明 之前整理了一篇jcifs不能用於SMB2/SMB3機器的解決方式,其中提到了將jcifs包替換為smbj的方式解決,給出的下載的demo中雖然可以正常列出共享資料夾中的檔案,但是具體怎樣將共享資料夾中的檔案下載到本地並沒有詳細說明,現在將下載程式碼貼出,因為github上的jar包沒有給出

VMware Workstation 共享資料 & 固定IP設定

共享資料夾 1.Path: 虛擬機器--->設定--->選項--->共享資料夾    2.開啟共享資料夾 3.Turn on Network 4.Map network drive 選擇共享的資料夾 固定IP設定 1.主機在Network

在Windows下訪問Ubuntu共享資料

1. Install samba >sudo apt-get install samba  >sudo apt-get install smbclient 2. 修改配置檔案 >sudo vim /etc/samba/smb.conf

純淨版linux (debian)掛載VirtualBox共享資料 virtual box虛擬機器在linux下設定共享資料

使用的虛擬機器版本是:VirtualBox-5.2.8-121009 使用的linux版本是:Linux debian 4.9.0-7-amd64 tty 1. 開始配置 1.1:開啟虛擬機器設定,開啟你的VirtualBox軟體(主要先不要開啟linux系統)。選中你的虛擬機器後,

VMware中Linux虛擬機器掛載主機共享資料的方法

  注意:要在主機與虛擬機器中設定共享資料夾,需要安裝VMware Tools或open-vm-tools工具。open-vm-tools可能不能自動掛載共享資料夾。自動掛載點是“/mnt/hgfs”。   1、進入VMware選單欄中的虛擬機器設定選項——共享資料夾設定中新增主機中用來給客戶機共享的目錄。

c# 資料操作

using System; using System.Collections.Generic; using System.Data; using System.Globalization; using System.IO; using System.Linq; using System.Reflecti