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

📄 ftpconnection.java

📁 一个JAVA做的FTP软件,带源码的,可以很好的进行二次开发,,并带有详细说明文件的
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
                char ur = tmp.charAt(1);                char uw = tmp.charAt(2);                char ar = tmp.charAt(7);                char aw = tmp.charAt(8);                to.nextToken();                String user = to.nextToken();                //System.out.println(""+ur+":"+ar+":"+tmp);                if(aw == 'w')                {                    out.println("w");                }                else if(user.equals(username) && (uw == 'w'))                {                    out.println("w");                }                else if(ar == 'r')                {                    out.println("r");                }                else if(user.equals(username) && (ur == 'r'))                {                    out.println("r");                }                else                {                    //System.out.println(ur+":"+ar+":"+user+":"+username+":");                    out.println("n");                }            }            out.flush();            out.close();        }        catch(Exception ex)        {            Log.debug(ex.toString() + " @FtpConnection::getPermissions#1");        }        try        {            in = new BufferedReader(new FileReader(Settings.permissions_out));            //String[] files = new String[length];            int[] ret = new int[length];            String fx;            for(int i = 0; i < length; i++)            {                fx = in.readLine();                if(fx.equals("w"))                {                    ret[i] = W;                }                else if(fx.equals("n"))                {                    ret[i] = DENIED;                }                else                {                    ret[i] = R;                }                //System.out.println(ret[i]);            }            return ret;        }        catch(Exception ex)        {            Log.debug(ex.toString() + " @FtpConnection::getPermissions#2");        }        return new int[0];    }    /**    * Sort the filenames of the current working dir an return an array.    *    * The Array should be in sync with the other sort*-Methods    *    * @param file The file containing the raw server listing, usually Settings.ls_out    * @return An String-array of sizes containing the name of the file (symlinks are resolved)    */    public String[] sortLs(String file)    {        if(TESTMODE)        {            file = "/home/cdemon/sampleos2";        }        try        {            BufferedReader in = new BufferedReader(new FileReader(file));            PrintStream out = new PrintStream(new FileOutputStream(Settings.sortls_out));            int length = 0;	    boolean newUnixDateStyle = false;	    dateVector = new Vector();            while(true)            {                String tmp = in.readLine();                if(tmp == null)                {                    break;                }                // ------------------- VMS override --------------------                if(getOsType().indexOf("VMS") >= 0)                {                    int x = tmp.indexOf(";");                    if(x < 0)                    {                        continue;                    }                    tmp = tmp.substring(0, x);                    ;                    if(tmp.endsWith("DIR"))                    {                        out.println(tmp.substring(0, tmp.lastIndexOf(".")) +                                    "/");                    }                    else                    {                        out.println(tmp);                    }                    //Log.out("listing - (vms parser): " + tmp);                    length++;                    continue;                }                else if(getOsType().indexOf("OS/2") >= 0)                {                    StringTokenizer to2 = new StringTokenizer(tmp, " ", true);                    if(giveFile(to2, 2).indexOf("DIR") >= 0)                    {                        to2 = new StringTokenizer(tmp, " ", true);                        tmp = giveFile(to2, 5);                        tmp = tmp + "/";                    }                    else                    {                        to2 = new StringTokenizer(tmp, " ", true);                        if(giveFile(to2, 1).indexOf("DIR") >= 0)                        {                            //Log.out("OS/2 parser (DIRFIX): " + tmp);                            to2 = new StringTokenizer(tmp, " ", true);                            tmp = giveFile(to2, 4);                            tmp = tmp + "/";                        }                        else                        {                            to2 = new StringTokenizer(tmp, " ", true);                            tmp = giveFile(to2, 4);                        }                    }                    Log.out("OS/2 parser: " + tmp);                    out.println(tmp);                    length++;                    continue;                }                // -------------------------------------------------------                // ------------------- Unix, Windows and others -----                boolean isDir = false;                boolean isLink = false;                if(tmp.startsWith("d") || (tmp.indexOf("<DIR>") >= 0))                {                    isDir = true;                }                if(tmp.startsWith("l"))                {                    isLink = true;                }                if(tmp.startsWith("/") && (tmp.indexOf("denied") > 0))                {                    continue;                }                StringTokenizer to = new StringTokenizer(tmp, " ", false);                StringTokenizer to2 = new StringTokenizer(tmp, " ", true);                int tokens = to.countTokens();                //Log.out("listing: tokens: " + tokens + " - " + tmp);                boolean set = false;				//-----preparsing-----				if(!newUnixDateStyle)		{		try 		{		 StringTokenizer tx = new StringTokenizer(tmp, " ", false);		 tx.nextToken();		 tx.nextToken();		 tx.nextToken();		 tx.nextToken();		 tx.nextToken();		 String date = tx.nextToken();		 int x = date.indexOf("-");		 int y = date.lastIndexOf("-");		 		 if(y > x)		 {				Log.debug("Using new Unix date parser");			newUnixDateStyle = true;		 }		}		catch(Exception ex)		{			Log.out("could not preparse line: " + tmp);		} 		}		//--------------------				//Log.out("tmp: " + tmp);		    		if(newUnixDateStyle) // unix, too		{                    set = true;		    //Log.out("listing - (unix parser #2, token 7): " + tmp);		    //------- date parser testing ---------		    try		    {		    	//Log.out(">>> date parser: " + tmp);		    			StringTokenizer to3 = new StringTokenizer(tmp, " ", true);		    	String tx = giveFile(to3,5);					String date = tx.substring(0, tx.indexOf(" ")+1).trim();						StringTokenizer to4 = new StringTokenizer(tmp, " ", true);		    	String tx2 = giveFile(to4,6);			String date2 = tx.substring(0, tx.indexOf(" ")+1).trim();			date2.replace(":","-");									String t = date;			String y = t.substring(0,t.indexOf("-"));			String m = t.substring(t.indexOf("-")+1, t.lastIndexOf("-"));			String day = t.substring(t.lastIndexOf("-")+1);			String h = date2.substring(0,date2.indexOf("-"));			String min = date2.substring(date2.lastIndexOf("-")+1);						Date d = new Date();			d.setDate(Integer.parseInt(day));			d.setYear(Integer.parseInt(y));			d.setMonth(Integer.parseInt(m));			d.setHours(Integer.parseInt(h));			d.setMinutes(Integer.parseInt(min));														dateVector.add(d);					    	//Log.out("+++ date: \"" + d.toString() + "\"");				    }		    catch(Exception ex)		    {		    	ex.printStackTrace();		    }    	    		    // -----------------------------                    tmp = giveFile(to2, 7);		}                else if(tokens > 8) // unix                {                    set = true;                    tmp = giveFile(to2, 8);                    //Log.out("listing - (unix parser, token 8): " + tmp);                }                else if(tokens > 3) // windows                {                    set = true;                    tmp = giveFile(to2, 3);                    if(tmp.startsWith("<error>"))                    {                        tmp = giveFile(to2, 4);                        //Log.out("listing - (windows parser, token 4): " + tmp);                    }                    else                    {                        //Log.out("listing - (windows parser, token 3): " + tmp);                    }                }                if(tmp.startsWith("<error>") || !set)                {                    if(tokens < 3)                    {                        continue;                    }                    tmp = giveFile(to2, tokens);                    Log.out("listing - WARNING: listing style unknown, using last token as filename!");                    Log.out("listing - this may work but may also fail, filesizes and permissions will probably fail, too...");                    Log.out("listing - please send us a feature request with the serveraddress to let us support this listing style :)");                    Log.out("listing - (backup parser, token " + tokens +                            " ): " + tmp);                }                if(isDir)                {                    tmp = tmp + "/";                }                else if(isLink)                {                    tmp = tmp + "###";                }                out.println(tmp);                length++;                // -------------------------------------------------------------            }            in = new BufferedReader(new FileReader(Settings.sortls_out));            String[] files = new String[length];            for(int i = 0; i < length; i++)            {                files[i] = parseSymlink(in.readLine());		//System.out.println("> " + files[i]);            }            return files;        }        catch(Exception ex)        {            Log.debug(ex.toString() + " @FtpConnection::sortLs");        }	//------- date parser test ------	/*	String[] x = (String[]) dateVector.toArray();	for(int i=0; i<x.length; i++)	{		Log.out(":"+x[i]);	}	*/	//-------------------------------	        return new String[0];    }    /** get a filename */    private String giveFile(StringTokenizer to, int lev)    {    	String t2 = null;	        for(int i = 0; i < lev; i++)        {            if(to.hasMoreTokens())            {                String t = to.nextToken();		//Log.out("> "+t);                if(t.equals(" ") || t.equals("\t"))                {		 // -		 /*		    while(to.hasMoreTokens())		    {		    	t2 = to.nextToken();			if(!t.equals(" ") && !t.equals("\t")) break;		    }		 */                       i--;                }            }        }        String tmp = "<error>";		/*	if(t2 != null)	{		tmp = t2;	}	*/	        while(tmp.equals(" ") || tmp.equals("\t") || tmp.equals("<error>"))        {            if(to.hasMoreTokens())            {                tmp = to.nextToken();            }            else            {                break;            }        }        while(to.hasMoreTokens())        {            tmp = tmp + to.nextToken();        }	//Log.out(">>> "+tmp);        return tmp;    }    /** get a filesize */    private String giveSize(StringTokenizer to, int lev)    {        for(int i = 0; i < lev; i++)        {            if(to.hasMoreTokens())            {                if(to.nextToken().equals(" "))                {                    i--;                }            }        }        while(to.hasMoreTokens())        {            String tmp = to.nextToken();            if(!tmp.equals(" "))            {                try                {                    Integer.parseInt(tmp);                }                catch(NumberFormatException ex)                {                    return "-1";                }                return tmp;            }        }        return "-2";    }    /**    * Try to determine the os-type.    * (Used internally to check how to parse the ls-output)    *    * @return A Part of the SYST comman server response    */    public String getOsType()    {        if(TESTMODE)        {            return "OS/2";        }        else        {            return osType;        }    }    private void setOsType(String os)    {        osType = os.toUpperCase();    }    private int getPasvPort(String str)    {        int start = str.lastIndexOf(",");        String lo = "";        start++;        while(start < str.length())        {            char c = str.charAt(start);            if(!Character.isDigit(c))            {                break;            }            lo = lo + c;            start++;        }        String hi = "";        start = str.lastIndexOf(",");        start--;        while(true)        {            char c = str.charAt(start);            if(!Character.isDigit(c))            {                break;            }            hi = c + hi;            start--;        }        //System.out.print(hi+":"+lo+" - ");        return ((Integer.parseInt(hi) * 256) + Integer.parseInt(lo));    }

⌨️ 快捷键说明

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