⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smbconnection.java

📁 一个JAVA做的FTP软件,带源码的,可以很好的进行二次开发,,并带有详细说明文件的
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */package net.sf.jftp.net;import jcifs.smb.*;import net.sf.jftp.config.Settings;import net.sf.jftp.util.Log;import net.sf.jftp.util.StringUtils;import java.io.*;import java.net.*;import java.util.*;public class SmbConnection extends NtlmAuthenticator implements BasicConnection{    public static int smbBuffer = 128000;    private String path = "";    private String pwd = "smb://";    private Vector listeners = new Vector();    private String[] files;    private String[] size = new String[0];    private int[] perms = null;    private String user;    private String pass;    private String host;    private String domain = null;    private String baseFile;    private int fileCount;    private boolean isDirUpload = false;    private boolean shortProgress = false;    private boolean dummy = false;    public SmbConnection()    {    }    public SmbConnection(String url, String domain, String user, String pass,                         ConnectionListener l)    {        if(l != null)        {            listeners.add(l);        }        this.user = user;        this.pass = pass;        this.host = host;        //***        if(domain.equals("NONE"))        {            domain = null;        }        this.domain = domain;        //if(url == null) chdir(getPWD());        if(url.equals("(LAN)"))        {            chdir(getPWD());        }        else        {            chdir(url);        }        //***    }    protected NtlmPasswordAuthentication getNtlmPasswordAuthentication()    {        //Log.debug("Auth: " + domain+ ";" + user + ":" + pass);        try        {            return new NtlmPasswordAuthentication(domain, user, pass);        }        catch(Exception ex)        {            Log.debug("Error logging in: " + ex);            ex.printStackTrace();            return null;        }    }    private NtlmPasswordAuthentication getAuth()    {        return getNtlmPasswordAuthentication();    }    public int removeFileOrDir(String file)    {        file = toSMB(file);        //System.out.println(file);        try        {            SmbFile f = new SmbFile(file, getAuth());            if(f.exists() && f.isDirectory())            {                cleanSmbDir(file);            }            f.delete();        }        catch(Exception ex)        {            Log.debug("Removal failed (" + ex + ").");            return -1;        }        return 1;    }    private void cleanSmbDir(String dir) throws Exception    {        dir = toSMB(dir);        SmbFile f2 = new SmbFile(dir, getAuth());        String[] tmp = f2.list();        if(tmp == null)        {            return;        }        for(int i = 0; i < tmp.length; i++)        {            SmbFile f3 = new SmbFile(dir + tmp[i], getAuth());            if(f3.isDirectory())            {                //System.out.println(dir);                cleanSmbDir(dir + tmp[i]);                f3.delete();            }            else            {                //System.out.println(dir+tmp[i]);                f3.delete();            }        }    }    public void sendRawCommand(String cmd)    {    }    public void disconnect()    {    }    public boolean isConnected()    {        return true;    }    public String getPWD()    {        //Log.debug("PWD: " + pwd);        return toSMB(pwd);    }    public boolean cdup()    {        String tmp = pwd;        if(pwd.endsWith("/") && !pwd.equals("smb://"))        {            tmp = pwd.substring(0, pwd.lastIndexOf("/"));        }        return chdir(tmp.substring(0, tmp.lastIndexOf("/") + 1));    }    public boolean mkdir(String dirName)    {        try        {            if(!dirName.endsWith("/"))            {                dirName = dirName + "/";            }            dirName = toSMB(dirName);            SmbFile f = new SmbFile(dirName, getAuth());            f.mkdir();            fireDirectoryUpdate();            return true;        }        catch(Exception ex)        {            Log.debug("Failed to create directory (" + ex + ").");            return false;        }    }    public void list(String outfile) throws IOException    {    }    public boolean chdir(String p)    {        return chdir(p, true);    }    public boolean chdir(String p, boolean refresh)    {        try        {            if(p.endsWith(".."))            {                return cdup();            }            String tmp = toSMB(p);            if(!tmp.endsWith("/"))            {                tmp = tmp + "/";            }            //Log.debug("tmp: " + tmp);            SmbFile f = new SmbFile(tmp, getAuth());            f.list();            pwd = tmp;            //Log.debug("pwd: " + pwd);            //System.out.println("chdir: " + getPWD());            if(refresh)            {                fireDirectoryUpdate();            }            //System.out.println("chdir2: " + getPWD());            dummy = false;            return true;        }        catch(Exception ex)        {            if((ex.getMessage().indexOf("MSBROWSE") > 0) && !dummy)            {                Log.debug("\nCould not find a master server.");                Log.debug("Please make sure you have the local IP set to the interface you want to use, and if");                Log.debug("that does not work try \"<default>\"...");                Log.debug("If you still can not find a master make sure that there is one your LAN and submit a bug report.");                dummy = true;            }            else            {                Log.debug("Could not change directory (" + ex + ").");            }            return false;        }    }    public boolean chdirNoRefresh(String p)    {        return chdir(p, false);    }    public String getLocalPath()    {        return path;    }    public boolean setLocalPath(String p)    {        if(StringUtils.isRelative(p))        {            p = path + p;        }        p = p.replace('\\', '/');        //System.out.println(", local 2:" + p);        File f = new File(p);        if(f.exists())        {            try            {                path = f.getCanonicalPath();                path = path.replace('\\', '/');                if(!path.endsWith("/"))                {                    path = path + "/";                }                //System.out.println("localPath: "+path);            }            catch(IOException ex)            {                Log.debug("Error: can not get pathname (local)!");                return false;            }        }        else        {            Log.debug("(local) No such path: \"" + p + "\"");            return false;        }        return true;    }    public String[] sortLs(String file)    {        try        {            //Log.debug("sortLs: trying");            chdirNoRefresh(getPWD());            SmbFile fx = new SmbFile(pwd, getAuth());            //System.out.println(pwd);            //if(fx == null) System.out.println("Smb: fx null");            SmbFile[] f = fx.listFiles();            //Log.debug("sortLs: file is there and listed");            //if(f == null) System.out.println("Smb: f null");            files = new String[f.length];            size = new String[f.length];            perms = new int[f.length];            int i;            for(i = 0; i < f.length; i++)            {                files[i] = f[i].toURL().toString();                int x = 0;                for(int j = 0; j < files[i].length(); j++)                {                    if(files[i].charAt(j) == '/')                    {                        x++;                    }                }                if(files[i].endsWith("/") && (x > 3))                {                    files[i] = StringUtils.getDir(files[i]);                }                else if(x > 3)                {                    files[i] = StringUtils.getFile(files[i]);                }                size[i] = "" + f[i].length();                if(f[i].canRead())                {                    perms[i] = FtpConnection.R;                }                else if(f[i].canWrite())                {                    perms[i] = FtpConnection.R;                }                else                {                    perms[i] = FtpConnection.DENIED;                }            }            //Log.debug("sortLs: finished, ok");            return files;        }        catch(Exception ex)        {            if(ex instanceof SmbAuthException)            {                Log.debug("Access denied: " + ex);                //Log.debug("URL: " + getPWD());                //Log.debug("Auth (bin): " + getAuth().toString());                //Log.debug("Auth: " + domain+ ";" + user + ":" + pass);            }            else            {                Log.debug("Error: " + ex);            }            return new String[0];        }    }    public String[] sortSize(String file)    {        return size;    }    public int[] getPermissions(String file)    {        return perms;    }    public int handleUpload(String f)    {        if(Settings.getEnableSmbMultiThreading())        {            SmbTransfer t = new SmbTransfer(getPWD(), getLocalPath(), f, user,                                            pass, domain, listeners,                                            Transfer.UPLOAD);        }        else        {            upload(f);        }        return 0;    }    public int handleDownload(String f)    {        if(Settings.getEnableSmbMultiThreading())        {            SmbTransfer t = new SmbTransfer(getPWD(), getLocalPath(), f, user,                                            pass, domain, listeners,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -