samba遠程讀寫文件

//遠程Windows系統下得創建一個共享文件夾,其權限是可讀寫。

//遠程linux系統得啓動smb服務,並進行配置

package yzh;
 
import java.io.*;
import java.net.*;
import java.util.*;
import jcifs.smb.*;
 
public class Test5 {
 public static final String REMOTE_HOST_IP="10.11.1.230";
 public static final String LOGIN_ACCOUNT="administrator";
 public static final String LOGIN_PASSWORD="cssodps2008__";
 public static final String SHARE_DOC_NAME="a";
// public static final String REMOTE_HOST_IP="127.0.0.1";
// public static final String LOGIN_ACCOUNT="administrator";
// public static final String LOGIN_PASSWORD="administrator";
// public static final String SHARE_DOC_NAME="a";
//    
 private String remoteHostIp; //遠程主機IP  
 private String account;       //登陸賬戶  
 
 private String password;      //登陸密碼  
 private String shareDocName; //共享文件夾名稱  
 
 /** 
     * 默認構造函數 
 */ 
 public Test5(){  
       this.remoteHostIp = REMOTE_HOST_IP;  
       this.account = LOGIN_ACCOUNT;  
        this.password = LOGIN_PASSWORD;  
        this.shareDocName = SHARE_DOC_NAME;  
       }  
            
      /** 
          * 構造函數 
          * @param remoteHostIp 遠程主機Ip 
          * @param account       登陸賬戶 
          * @param password      登陸密碼 
          * @param sharePath     共享文件夾路徑 
          */ 
         public Test5(String remoteHostIp, String account, String password,String shareDocName) {  
              this.remoteHostIp = remoteHostIp;  
             this.account = account;  
             this.password = password;  
             this.shareDocName = shareDocName;  
         }     
            
         /** 
          * 對遠程共享文件進行讀取所有行 
          * @param remoteFileName 文件名 說明:參數爲共享目錄下的相對路徑 
          *                                若遠程文件的路徑爲:shareDoc/test.txt,則參數爲test.txt(其中shareDoc爲共享目錄名稱); 
          *                                若遠程文件的路徑爲:shareDoc/doc/text.txt,則參數爲doc/text.txt; 
          * @return 文件的所有行 
          */ 
         public List<String> readFile(String remoteFileName){  
             SmbFile smbFile = null;  
             BufferedReader reader = null;  
             List<String> resultLines = null;  
             //構建連接字符串,並取得文件連接  
             String conStr = null;  
             conStr = "smb://"+account+":"+password+"@"+remoteHostIp+"/"+shareDocName+"/"+remoteFileName;  
             try {  
                 smbFile = new SmbFile(conStr);  
             } catch (MalformedURLException e) {  
                 e.printStackTrace();  
             }  
                
             //創建reader  
             try {  
                 reader = new BufferedReader(new InputStreamReader(new SmbFileInputStream(smbFile)));  
             } catch (SmbException e) {  
                 e.printStackTrace();  
             } catch (MalformedURLException e) {  
                 e.printStackTrace();  
             } catch (UnknownHostException e) {  
                 e.printStackTrace();  
             }         
             //循環對文件進行讀取  
             String line;  
             try {  
                 line = reader.readLine();  
                 if(line != null && line.length()>0){  
                     resultLines = new ArrayList<String>();  
                 }  
                 while (line != null) {  
                     resultLines.add(line);  
                      line = reader.readLine();  
                 }  
             } catch (IOException e) {  
                 e.printStackTrace();  
             }  
             //返回  
             return resultLines;  
         }  
            
         /** 
          * 對遠程共享文件進行寫入 
          * @param is                本地文件的輸入流 
          * @param remoteFileName    遠程文件名    說明:參數爲共享目錄下的相對路徑 
          *                                             若遠程文件的路徑爲:shareDoc/test.txt,則參數爲test.txt(其中shareDoc爲共享目錄名稱); 
          *                                             若遠程文件的路徑爲:shareDoc/doc/text.txt,則參數爲doc/text.txt; 
          * @return   
          */ 
         public boolean writeFile(InputStream is, String remoteFileName){  
             SmbFile smbFile = null;  
             OutputStream os = null;  
             byte[] buffer = new byte[1024*8];  
             //構建連接字符串,並取得文件連接  
             String conStr = null;  
             conStr = "smb://"+account+":"+password+"@"+remoteHostIp+"/"+shareDocName+"/"+remoteFileName;  
             try {  
                 smbFile = new SmbFile(conStr);  
             } catch (MalformedURLException e) {  
                 e.printStackTrace();  
                 return false;  
             }  
                
             //獲取遠程文件輸出流並寫文件到遠程共享文件夾  
             try {  
                 os = new BufferedOutputStream(new SmbFileOutputStream(smbFile));  
                 while((is.read(buffer))!=-1){  
                     os.write(buffer);         
                 }  
             } catch (Exception e) {  
                 e.printStackTrace();  
                 return false;  
             }   
                
             return true;  
         }  
            
            
         /** 
          * 對遠程共享文件進行寫入重載 
          * @param localFileName   要寫入的本地文件全名 
          * @param remoteFileName 遠程文件名    說明:參數爲共享目錄下的相對路徑 
          *                                           若遠程文件的路徑爲:shareDoc/test.txt,則參數爲test.txt(其中shareDoc爲共享目錄名稱);  
          *                                           若遠程文件的路徑爲:shareDoc/doc/text.txt,則參數爲doc/text.txt; 
          * @return 
          */ 
         public boolean writeFile(String localFileFullName ,String remoteFileName){  
             try {  
                 return writeFile(new FileInputStream(new File(localFileFullName)),remoteFileName);  
             } catch (FileNotFoundException e) {  
                 e.printStackTrace();  
                 return false;  
             }  
         }  
            
         /** 
          * 對遠程共享文件進行寫入重載 
          * @param localFileName   要寫入的本地文件 
          * @param remoteFileName 遠程文件名    說明:參數爲共享目錄下的相對路徑 
          *                                           若遠程文件的路徑爲:shareDoc/test.txt,則參數爲test.txt(其中shareDoc爲共享目錄名稱); 
          *                                           若遠程文件的路徑爲:shareDoc/doc/text.txt,則參數爲doc/text.txt; 
          * @return 
          */ 
         public boolean writeFile(File localFile ,String remoteFileName){  
             try {  
                 return writeFile(new FileInputStream(localFile),remoteFileName);  
             } catch (FileNotFoundException e) {  
                 e.printStackTrace();  
                 return false;  
             }  
         }  
            
            
         public static void main(String[] args){  
          Test5 test = new Test5();
//          System.out.println("aa.txt:----->");
//        List<String> lines = test.readFile("aa.txt");  
//        for (String string : lines) {  
//            System.out.println(string);  
//        }  
             test.writeFile(new File("d:/read.txt"), "bb.txt");  
         }  
 } 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章