从FTP服务器返回来的TelnetInputStream流中读取文件的文件名,文件大小,文件日期
来源:互联网 发布:软件实施 编辑:程序博客网 时间:2024/05/18 04:13
这两天在做毕业设计,使用的是sun.net.ftp.FtpClient,其中有个难题就是怎么获取服务器中的文件列表并显示出来,终于弄出来了,现在写出来记录一下
step1:获取服务器文件列表的信息,返回一个TelnetInputStream
TelnetInputStream list = ftpClient.list(); // 获取服务器文件列表listFtpFiles(list); // 调用解析方法step2:对返回来的TelnetInputStream进行解析
/** * 读取FTP文件到表格的方法 * * @param list * 读取FTP服务器资源列表的输入流 */public synchronized void listFtpFiles(final TelnetInputStream list) {// 获取表格的数据模型final DefaultTableModel model = (DefaultTableModel) ftpDiskTable.getModel();model.setRowCount(0);// 创建一个线程类Runnable runnable = new Runnable() {public synchronized void run() {ftpDiskTable.clearSelection();try {String pwd = getPwd(); // 获取FTP服务器的当前文件夹model.addRow(new Object[] { new FtpFile(".", pwd, true),"", "" }); // 添加“.”符号model.addRow(new Object[] { new FtpFile("..", pwd, true),"", "" }); // 添加“..”符号/*byte[]names=new byte[2048];int bufsize=0;bufsize=list.read(names, 0, names.length);//list.close();int i=0,j=0;while(i<bufsize){char bc=(char)names[i];System.out.print(i+" "+bc+" ");//文件名在数据中开始做坐标为j,i-j为文件名的长度,文件名在数据中的结束下标为i-1if (names[i]==13) {//System.out.println("j:"+j+" i:"+i+ " i-j:"+(i-j));String temName=new String(names,j,i-j);System.out.println("temName="+temName);j=i+2;}i=i+1;}*//* 其中格式应满足如下格式的字符串结果为:0 -: 1 r: 2 w: 3 x: 4 -: 5 -: 6 -: 7 -: 8 -: 9 -: 10 : 11 1: 12 : 13 u: 14 s: 15 e: 16 r: 17 : 18 g: 19 r: 20 o: 21 u: 22 p: 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 31 : 32 6: 33 7: 34 8: 35 4: 36 3: 37 0: 38 : 39 A: 40 p: 41 r: 42 : 43 1: 44 6: 45 : 46 2: 47 1: 48 :: 49 4: 50 6: 51 : 52 F: 53 T: 54 P: 55 ?: 56 ?: 57 ?: 58 ?: 59 ?: 60 ?: 61 ?: 62 ?: 63 ?: 64 ?: 65 ?: 66 ?: 67 ?: 68 ?: 69 ?: 70 ?: 71 ?: 72 ?: 73 .: 74 p: 75 d: 76 f: 77 -rwx------ 1 user group 678430 Apr 16 21:46 FTP客户端的设计与实现.pdf -rwx------ 1 user group 87504927 Apr 18 22:50 VC.深入详解(孙鑫)[www.xuexi111.com].pdf -rwx------ 1 user group 57344 Apr 18 05:32 腾讯电商2013实习生招聘TST推荐模板.xls *<br>d表示目录 * <br>-表示文件 * <br>rw-rw-rw-表示权限设置dateStr:39-51sizeOrDir:23-38fileName:52-^*//*********************************************************/byte[]names=new byte[2048];int bufsize=0;bufsize=list.read(names, 0, names.length);int i=0,j=0;while(i<bufsize){//字符模式为10,二进制模式为13//if (names[i]==10) {if (names[i]==13) {//获取字符串 -rwx------ 1 user group 57344 Apr 18 05:32 腾讯电商2013实习生招聘TST推荐模板.xls//文件名在数据中开始做坐标为j,i-j为文件名的长度,文件名在数据中的结束下标为i-1String fileMessage = new String(names,j,i-j);if(fileMessage.length() == 0){System.out.println("fileMessage.length() == 0");break;}//按照空格将fileMessage截为数组后获取相关信息// 正则表达式 \s表示空格,{1,}表示1一个以上 if(!fileMessage.split("\\s+")[8].equals(".") && !fileMessage.split("\\s+")[8].equals("..")){/**文件大小*/String sizeOrDir="";if (fileMessage.startsWith("d")) {//如果是目录sizeOrDir="<DIR>";}else if (fileMessage.startsWith("-")) {//如果是文件sizeOrDir=fileMessage.split("\\s+")[4];}/**文件名*/String fileName=fileMessage.split("\\s+")[8];/**文件日期*/String dateStr =fileMessage.split("\\s+")[5] +fileMessage.split("\\s+")[6] +fileMessage.split("\\s+")[7];//System.out.println("sizeOrDir="+sizeOrDir);//System.out.println("fileName="+fileName); //System.out.println("dateStr="+dateStr);FtpFile ftpFile = new FtpFile();// 将FTP目录信息初始化到FTP文件对象中ftpFile.setLastDate(dateStr);ftpFile.setSize(sizeOrDir);ftpFile.setName(fileName);ftpFile.setPath(pwd);// 将文件信息添加到表格中model.addRow(new Object[] { ftpFile, ftpFile.getSize(),dateStr });}//j=i+1;//上一次位置为字符模式j=i+2;//上一次位置为二进制模式}i=i+1;}list.close();/**********************************************************************//下面的方法太死了,不够灵活BufferedReader br = new BufferedReader(new InputStreamReader(list)); // 创建字符输入流String data = null;// 读取输入流中的文件目录while ((data = br.readLine()) != null) {// 创建FTP文件对象FtpFile ftpFile = new FtpFile();// 获取FTP服务器目录信息 String dateStr = data.substring(39, 51).trim();String sizeOrDir = data.substring(23, 38).trim();String fileName = data.substring(52, data.length()).trim();// 将FTP目录信息初始化到FTP文件对象中ftpFile.setLastDate(dateStr);ftpFile.setSize(sizeOrDir);ftpFile.setName(fileName);ftpFile.setPath(pwd);// 将文件信息添加到表格中model.addRow(new Object[] { ftpFile, ftpFile.getSize(),dateStr });}br.close(); // 关闭输入流**********************************************************************/} catch (IOException ex) {Logger.getLogger(FTP_Client_Frame.class.getName()).log(Level.SEVERE, null, ex);}}};if (SwingUtilities.isEventDispatchThread()) // 启动线程对象runnable.run();elseSwingUtilities.invokeLater(runnable);}
因为该代码只是截取一部分,有很多类都没有写出来,但是关注的就是核心代码
step3:结果展示
- 从FTP服务器返回来的TelnetInputStream流中读取文件的文件名,文件大小,文件日期
- 从FTP服务器读取文件到本地
- 从ftp服务器新版本文件的脚本
- 批命令从FTP服务器GET由当前日期组合成文件名的文件
- 从ftp获取文件列表以及文件大小
- 获取ftp服务器上指定文件夹的文件列表(包含文件大小)
- Java-读取某个目录下所有文件、文件夹和3种从文件路径中获取文件名的方法
- 监听FTP服务器来获取读写完成的文件
- java循环读取ftp服务器上面的文件
- 取得文件夹下的所有文件的文件名和文件大小
- 如何创建文件名中包含当前日期的文件?
- Java读取指定文件下的文件名到Excel中
- java 从ftp服务器上 读取文件内容
- Ubuntu下从ftp服务器获取文件的方法
- 读取ftp文件返回文件内容
- 从文件路径中获取文件名的方法
- 从文件中读取指定的行
- ftp服务器的文件操作
- ImageSpan的使用
- Ubuntu下将Sublime加入环境变量
- Google Map Api 谷歌地图接口整理
- 两道关于位操作的面试题
- java_GUI(3)
- 从FTP服务器返回来的TelnetInputStream流中读取文件的文件名,文件大小,文件日期
- 2013年腾讯笔试题目
- 矩阵顺时针旋转90度
- HDU 1102 Constructing Roads
- linux常用命令大全(转)
- Jquery option
- ip route + ip rule实现双ISP接入网络配置
- 如何在Google Code上建立私有代码版本库
- 在hibernate中,如何把原生sql查询出来的结果映射到实体bean