SambaJava API

做一个 backup

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 class SambaJavaApi {
    
    //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 void main(String[] args) {
        
        SambaJavaApi sa = new SambaJavaApi();
        
        
        user = "admin";
        password = "admin";
        sa.uploadViaShare(ip , user, password, smb_dir);
    }
    
    
    public void uploadViaShare(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 =  new NtlmPasswordAuthentication(ip, user, password);
            
            long startTime = System.currentTimeMillis();  
            try {  
                url = "smb://"+ip +"/"+ dir;
                System.out.println(url);
                
                Config.setProperty("jcifs.netbios.wins", ip);
                
                SmbFile shareDir = new SmbFile(url, auth);
                shareDir.connect();
//                SmbFile shareDir = new SmbFile(url);  
                if(shareDir.isDirectory())
                {
                    smbIs = new SmbFileOutputStream(shareDir);  
                    fos = new FileInputStream(new File(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 void downloadViaShare(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 =  new NtlmPasswordAuthentication(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 = new SmbFile(url, auth);
                    shareDir.connect();
    //                SmbFile shareDir = new SmbFile(url);  
                    if(shareDir.isDirectory())  
                    {  
                        fileList = shareDir.listFiles();    
                        for(int i=0;i<fileList.length;i++)    
                        {  
                            if(fileList[i].isFile())  
                            {  
                                smbIs = new SmbFileInputStream((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://<pcname>/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() );
//            }
//    }
}
原文地址:https://www.cnblogs.com/FlyAway2013/p/5654345.html