//遠程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");
}
}