ftpconnection.java
来自「java ftp 操作代码,程序可以直接运行」· Java 代码 · 共 2,382 行 · 第 1/5 页
JAVA
2,382 行
{ Log.debug(ex.toString() + " @FtpConnection::sortSize#1"); return new String[0]; } return toArray(currentSizes); } private String[] toArray(Vector in) { String ret[] = new String[in.size()]; for(int i=0; i<in.size(); i++) { ret[i] = (String) in.get(i); } return ret; } /** * Sort the permissions 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 int-array of sizes containing W, R or DENIED for each file */ public int[] getPermissions() { try { currentPerms.removeAllElements(); for(int i=0; i<currentListing.size(); i++) { String tmp = (String) currentListing.get(i); // ------------- VMS override ------------------- if(getOsType().indexOf("VMS") >= 0) { if(tmp.indexOf(";") < 0) { continue; } currentPerms.add("r"); continue; } // ------------- MVS override ------------------- if(getOsType().indexOf("MVS") >= 0) { if(tmp.startsWith("Volume")) { continue; } currentPerms.add("r"); continue; } // ------------------------------------------------ StringTokenizer to = new StringTokenizer(tmp.trim(), " ", false); if(!(to.countTokens() > 3) || (tmp.startsWith("/") && (tmp.indexOf("denied") > 0))) { continue; } tmp = to.nextToken(); if(tmp.length() != 10) { //System.out.println(tmp + " - e"); return null; // exotic bug, hardlinks are not found or something ("/bin/ls: dir: no such file or directy" in ls output) - we have no permissions then } 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') { currentPerms.add("w"); } else if(user.equals(username) && (uw == 'w')) { currentPerms.add("w"); } else if(ar == 'r') { currentPerms.add("r"); } else if(user.equals(username) && (ur == 'r')) { currentPerms.add("r"); } else { //System.out.println(ur+":"+ar+":"+user+":"+username+":"); currentPerms.add("n"); } } } catch(Exception ex) { Log.debug(ex.toString() + " @FtpConnection::getPermissions#1"); } int[] ret = new int[currentPerms.size()]; for(int i=0; i<currentPerms.size(); i++) { String fx = (String) currentPerms.get(i); 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; } /** * Sort the filenames of the current working dir an return an array. * * The Array should be in sync with the other sort*-Methods * * @return An String-array of sizes containing the name of the file (symlinks are resolved) */ public String[] sortLs() { try { boolean newUnixDateStyle = false; dateVector = new Vector(); currentFiles.removeAllElements(); for(int i=0; i<currentListing.size(); i++) { String tmp = (String) currentListing.get(i); // ------------------- VMS override -------------------- if(getOsType().indexOf("VMS") >= 0) { int x = tmp.indexOf(";"); if(x < 0) { continue; } tmp = tmp.substring(0, x); if(tmp.endsWith("DIR")) { currentFiles.add(tmp.substring(0, tmp.lastIndexOf(".")) + "/"); } else { currentFiles.add(tmp); } //Log.out("listing - (vms parser): " + tmp); 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); currentFiles.add(tmp); continue; } // ------------------------------------------------------- // ------------------- MVS override -------------------- if(getOsType().indexOf("MVS") >= 0) { if(tmp.startsWith("Volume") || (tmp.indexOf(" ") < 0)) { Log.out("->" + tmp); continue; } String f = tmp.substring(tmp.lastIndexOf(" ")).trim(); String isDir = tmp.substring(tmp.lastIndexOf(" ") - 5, tmp.lastIndexOf(" ")); if(isDir.indexOf("PO") >= 0) { currentFiles.add(f + "/"); } else { currentFiles.add(f); } Log.out("listing - (mvs parser): " + tmp + " -> " + f); 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); currentFiles.add(tmp); 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----- int lcount = 0; 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); lcount++; //ex.printStackTrace(); } } //-------------------- //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 date = giveFile(to3, 5); String date2 = date.substring(date.indexOf("-") + 1); date2 = date2.substring(date.indexOf("-") + 2); //Log.out("date1: "+date+"/"+"date2: "+date2); String t = date; String y = t.substring(0, t.indexOf("-")); String m = t.substring(t.indexOf("-") + 1, t.indexOf("-") + 3); String m1 = t.substring(t.indexOf("-") + 1); String day = m1.substring(m1.indexOf("-") + 1, m1.indexOf("-") + 3); String h = date2.substring(0, date2.indexOf(":")); String min = date2.substring(date2.indexOf(":") + 1, date2.indexOf(":") + 3); //Log.out("day:"+day+"year:"+y+"mon:"+m+"hour:"+h+"m:"+min); Date d = new Date(); d.setDate(Integer.parseInt(day)); d.setYear(Integer.parseInt(y)); d.setMonth(Integer.parseInt(m) - 1); d.setHours(Integer.parseInt(h)); d.setMinutes(Integer.parseInt(min)); dateVector.add(d); //Log.out("+++ date: \"" + d.toString() + "\""); } catch(Exception ex) { ex.printStackTrace(); //set = false; } // ----------------------------- tmp = giveFile(to2, 7); if(lcount > 1) { dateVector = new Vector(); } } 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 + "###"; } currentFiles.add(tmp); // ------------------------------------------------------------- } String[] files = toArray(currentFiles); for(int i = 0; i < files.length; i++) { files[i] = parseSymlink(files[i]); //System.out.println("> " + files[i]+":"+dateVector.elementAt(i)); //System.out.println("> " + files.length+":"+dateVector.size()); } return files; } catch(Exception ex) { Log.debug(ex.toString() + " @FtpConnection::sortLs"); ex.printStackTrace(); } //------- date parser test ------ /* String[] x = (String[]) dateVector.toArray(); for(int i=0; i<x.length; i++) { Log.out(":"+x[i]); } */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?