怎样获取 ftp服务器上面的当前日期? 用的框架是commons-net 

解决方案 »

  1.   

    [code=Jav]
    public class MyUnixFTPParser implements FTPFileEntryParser {    public FTPFile parseFTPEntry(String listEntry) {
            FTPFile file = new FTPFile();
            // -rw-r--r-- 1 px1adm sapsys 4748 11月13日 17:24
            // DGJSH_ACCRUAL_ENTRY.txt(示例字符串)
            // 0. 看文件的是否是目录
            String dir = listEntry.substring(0, 1);
            if (dir.equals("-")) {// 文件
                file.setType(FTPFile.FILE_TYPE);
            } else {
                file.setType(FTPFile.DIRECTORY_TYPE);
            }        // 1. 解析文件的权限
            String[] strs = { listEntry.substring(1, 4)// 获得权限的字符串
                    , listEntry.substring(4, 7), listEntry.substring(7, 10) };        int[] users = { FTPFile.USER_ACCESS, FTPFile.GROUP_ACCESS, FTPFile.WORLD_ACCESS };
            for (int j = 0; j < strs.length; j++) {
                char[] arr = strs[j].toCharArray();
                for (int i = 0; i < arr.length; i++) {
                    if (arr[i] == 'r') {
                        file.setPermission(users[j], FTPFile.READ_PERMISSION, true);// 依次把权限添加到file中
                    } else if (arr[i] == 'w') {
                        file.setPermission(users[j], FTPFile.WRITE_PERMISSION, true);
                    } else if (arr[i] == 'x') {
                        file.setPermission(users[j], FTPFile.EXECUTE_PERMISSION, true);
                    }
                }        }        // 设置hardLink的个数
            // 去除字符串前面的权限
            listEntry = listEntry.substring(10);
            listEntry = deleteEmptyStr(listEntry);// 去除前面的空格
            long links = getStringHeadNum(listEntry);
            file.setHardLinkCount((int) links);        // 设置创建该文件的用户
            // 去除hardLink的个数
            listEntry = removeStringHeadNum(listEntry);
            listEntry = deleteEmptyStr(listEntry);// 去除字符串头的空格
            String user = getHeadString(listEntry);
            file.setUser(user);        // 设置用户所在的组
            // 去除用户
            listEntry = removeHeadString(listEntry);
            listEntry = deleteEmptyStr(listEntry);
            String group = getHeadString(listEntry);
            file.setGroup(group);        // 设置文件的大小
            listEntry = removeHeadString(listEntry);
            listEntry = deleteEmptyStr(listEntry);
            long size = getStringHeadNum(listEntry);
            file.setSize(size);        // 设置时间
            listEntry = removeHeadString(listEntry);
            listEntry = deleteEmptyStr(listEntry);
            // 获得日期和月份
            Calendar time = transferHeadStringToTime(listEntry);
            file.setTimestamp(time);        // 获得文件名字
            listEntry = removeHeadTimeString(listEntry);
            listEntry = deleteEmptyStr(listEntry);
            // 剩下的只有文件名字了
            if (listEntry.startsWith("@")) {
                file.setLink(listEntry.substring(1));
                file.setName(listEntry);
            } else {
                file.setName(listEntry);
            }
            return file;
        }    /**
         * 把开始的时间字符串去除掉
         */
        private String removeHeadTimeString(String str) {
            if (str.contains("年")) {// 如果只包含年
                return removeHeadString(str);
            } else {
                int index = str.indexOf(":") + 3;
                return str.substring(index);
            }
        }    /**
         * 由于本系统的FTP获得字符串中,出现的时间格式有两种,一种是只有年月日,另一个种是有月日时分,针对于这两种<br>
         * 针对于这两种格式,如果没有年的就以1970年为准,没有时和分就以00:00为准
         */
        private Calendar transferHeadStringToTime(String str) {
            String year = "1970";
            String month = "0";
            String day = "0";
            String hour = "0";
            String minute = "0";        // 1. 首先检索'年'的存在
            if (str.contains("年")) {
                // 年就存在于'年'的前4位
                int index = str.indexOf('年');
                year = str.substring(index - 4, index);// 因为年固定是4位
            }        // 2. 检索'月'
            int index = str.indexOf("月");
            // 月可能是1位,也可能是两位
            // 首先,尝试他是两位时
            if (str.contains("年")) {// 如果包含年,那么就年月之间的数字
                month = str.substring(str.indexOf('年') + 1, index).trim();
            } else {
                month = str.substring(0, index).trim();
            }        // 3. 检索'日'
            int index2 = str.indexOf("日");
            // 日一定是在于日与月之间的
            day = str.substring(index + 1, index2).trim();        // 4. 时分,如果没有年的存在,那么就有时和分的存在
            if (!str.contains("年")) {
                // 时和分一定在日的后面
                str = str.substring(index2 + 1).trim();
                index = str.indexOf(':');// 获得时和分的分割符
                hour = str.substring(0, index);
                minute = str.substring(index + 1, index + 3);// 分一定是2位
            }        Calendar calendar = Calendar.getInstance();
            calendar.set(new Integer(year), new Integer(month), new Integer(day), new Integer(hour), new Integer(minute), 0);
            calendar.set(Calendar.MILLISECOND, 0);// 把不能获得属性全部置为最初始的状态        return calendar;
        }    /**
         * 获得字符串前面不的字符串,直到遇到空格或字符串结束
         */
        private String getHeadString(String str) {
            char[] arr = str.toCharArray();
            int index = 0;
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] == ' ') {
                    break;
                } else {
                    index = i;
                }
            }
            return str.substring(0, index + 1);
        }    private String removeHeadString(String str) {
            char[] arr = str.toCharArray();
            int index = 0;
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] == ' ') {
                    break;
                } else {
                    index = i;
                }
            }
            return str.substring(index + 1);
        }    /**
         * 获得字符串头的数字
         */
        private Long getStringHeadNum(String str) {
            char[] arr = str.toCharArray();
            String num = "";
            for (int i = 0; i < arr.length; i++) {
                if (isDigit(arr[i])) {
                    num = num + arr[i];
                } else {
                    return new Long(num);
                }
            }        return (long) 0;
        }    /**
         *去除字符串头的数字
         */
        private String removeStringHeadNum(String str) {
            char[] arr = str.toCharArray();
            int index = 0;
            for (int i = 0; i < arr.length; i++) {
                if (isDigit(arr[i])) {
                    index = i;
                } else {
                    break;
                }
            }        return str.substring(index + 1);
        }    /**
         * 判断是否是数字字符
         */
        private boolean isDigit(char c) {
            for (int i = 0; i < 10; i++) {
                if (((char) ('0' + i)) == c) {
                    return true;
                }
            }
            return false;
        }    private static String deleteEmptyStr(String str) {
            return str.trim();
        }    public String readNextEntry(BufferedReader reader) throws IOException {
            String line = reader.readLine();
            return line;
        }    public static void main(String[] args) {
            String str = "1987年";
            System.out.println(str.indexOf('年'));
        }    @SuppressWarnings("unchecked")
        public List preParse(List original) {
            // 把总数的行给去掉(第一行)
            original.remove(0);
            return original;
        }}public class MyUnixFTPFactory implements FTPFileEntryParserFactory {    public FTPFileEntryParser createFileEntryParser(String arg0) throws ParserInitializationException {
            return new MyUnixFTPParser();
        }    public FTPFileEntryParser createFileEntryParser(FTPClientConfig arg0) throws ParserInitializationException {
            return new MyUnixFTPParser();
        }}[/code]
    公司用的unix对现有的都不兼容,这是我自己写的,解决了问题,你自己看着办吧!