package net.jnas;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import jcifs.Config;
import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbAuthException;
import jcifs.smb.SmbException;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
import jcifs.smb.SmbFileOutputStream;
import org.apache.log4j.Logger;public classSambaJavaApi {//jcifs.smb.SmbAuthException: Logon failure: unknown user name or bad password.//jcifs.smb.SmbException: Access is denied.//寫得時候,smb_dir必須是文件名,而不是路徑
private static String smb_dir = "lnas_service/aa/aaa.doc";//"/home/test/share";
private static String password = "888888";private static String user = "lk2";private static String ip = "192.168.4.49";private Logger logger = Logger.getLogger(this.getClass().getName());private String local_tempDir = "E:\\work\\samba\\test\\11.doc";public static voidmain(String[] args) {
SambaJavaApi sa= newSambaJavaApi();
user= "admin";
password= "admin";
sa.uploadViaShare(ip , user, password, smb_dir);
}public voiduploadViaShare(final String ip,final String user,final String password,final String dir)
{
logger.debug("Share(SMB) download!");
String newDir=dir;
String url= "";
FileInputStream fos= null;
SmbFileOutputStream smbIs= null;byte [] buffer = new byte[8192];int readBytes = 0;int totalBytes = 0;if (!dir.endsWith("/")) //directory must end with "/"
newDir = dir+"/";
url= "smb://"+user+":"+password+"@"+ip+""+newDir;
NtlmPasswordAuthentication auth= newNtlmPasswordAuthentication(ip, user, password);long startTime =System.currentTimeMillis();try{
url= "smb://"+ip +"/"+dir;
System.out.println(url);
Config.setProperty("jcifs.netbios.wins", ip);
SmbFile shareDir= newSmbFile(url, auth);
shareDir.connect();//SmbFile shareDir = new SmbFile(url);
if(shareDir.isDirectory())
{
smbIs= newSmbFileOutputStream(shareDir);
fos= new FileInputStream(newFile(local_tempDir));while((readBytes = fos.read(buffer)) > 0)
{
smbIs.write(buffer,0,readBytes);
totalBytes+=readBytes;
}
smbIs.close();
fos.close();long endTime =System.currentTimeMillis();long timeTaken = endTime-startTime;
logger.debug(totalBytes+"bytes downloaded in" + timeTaken/1000 + "seconds at"+ (( totalBytes / 1000 ) / Math.max( 1, ( timeTaken / 1000 ))) + "Kb/sec");
}
}catch(MalformedURLException urle)
{
logger.debug("Incorrect URL format!");
}catch(SmbException smbe) {
smbe.printStackTrace();
logger.debug(this.getClass().getName()+"||"+smbe.getMessage());
}catch(IOException ioe)
{
ioe.printStackTrace();
logger.debug(this.getClass().getName()+"||"+ioe.getMessage());
}finally{try{
smbIs.close();
fos.close();
}catch(Exception smbe)
{
logger.debug(this.getClass().getName()+"||"+smbe.getMessage());
}
}
}public voiddownloadViaShare(final String ip,final String user,final String password,final String dir)
{
logger.debug("Share(SMB) download!");
String newDir=dir;
String url= "";
SmbFile [] fileList= null;
FileOutputStream fos= null;
SmbFileInputStream smbIs= null;byte [] buffer = new byte[8192];int readBytes = 0;int totalBytes = 0;if (!dir.endsWith("/")) //directory must end with "/"
newDir = dir+"/";
url= "smb://"+user+":"+password+"@"+ip+""+newDir;
NtlmPasswordAuthentication auth= newNtlmPasswordAuthentication(ip, user, password);long startTime =System.currentTimeMillis();try{
url= "smb://"+ip +"/"+dir;
System.out.println(url);//final NtlmPasswordAuthentication AUTH = new NtlmPasswordAuthentication("domainname", "username", "password");
Config.setProperty("jcifs.netbios.wins", ip);//Properties props = new Properties();//InputStream in = new SmbFileInputStream(new SmbFile("smb://10.10.1.1:445/rootfolder/path/filename.properties", AUTH));//props.load(in);
SmbFile shareDir= newSmbFile(url, auth);
shareDir.connect();//SmbFile shareDir = new SmbFile(url);
if(shareDir.isDirectory())
{
fileList=shareDir.listFiles();for(int i=0;i
{if(fileList[i].isFile())
{
smbIs= newSmbFileInputStream((SmbFile)fileList[i]);
fos= new FileOutputStream(new File(local_tempDir +File.separator+fileList[i].getName()));while((readBytes = smbIs.read(buffer)) > 0)
{
fos.write(buffer,0,readBytes);
totalBytes+=readBytes;
}
smbIs.close();
fos.close();//break;//logger.debug(fileList[i].getName() + " is downloaded!");//try//{//fileList[i].delete();//}catch(SmbAuthException smbae )//{//logger.debug(fileList[i].getName()+" can not be deleted!");//}
}
}long endTime =System.currentTimeMillis();long timeTaken = endTime-startTime;
logger.debug(totalBytes+"bytes downloaded in" + timeTaken/1000 + "seconds at"+ (( totalBytes / 1000 ) / Math.max( 1, ( timeTaken / 1000 ))) + "Kb/sec");
}
}catch(MalformedURLException urle)
{
logger.debug("Incorrect URL format!");
}catch(SmbException smbe) {
smbe.printStackTrace();
logger.debug(this.getClass().getName()+"||"+smbe.getMessage());
}catch(IOException ioe)
{
ioe.printStackTrace();
logger.debug(this.getClass().getName()+"||"+ioe.getMessage());
}finally{try{
smbIs.close();
fos.close();
}catch(Exception smbe)
{
logger.debug(this.getClass().getName()+"||"+smbe.getMessage());
}
}
}//private void Asasf() {// //TODO Auto-generated method stub//String strprog = "STRING CREATED| ";//debug log string//try {//strprog += "NTLM| ";//NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("username:password");//strprog += "SMB| ";//SmbFile file = new SmbFile("smb:///foldername/filename.txt",auth);//
//strprog += "EXIST| ";//String there = String.valueOf(file.exists());//
//strprog += "View| ";//TextView pp;//pp = (TextView) findViewById(R.id.tv);//pp.setText(there);//
//
//
//} catch (Exception e) {// //TODO Auto-generated catch block//strprog += "ERROR! ";//TextView ll;//ll = (TextView) findViewById(R.id.tv);//
//
//ll.setText(strprog + e.getStackTrace().toString() + " " + e.getMessage() + " " + e.getLocalizedMessage() );//}//}
}