从FTP服务器返回来的TelnetInputStream流中读取文件的文件名,文件大小,文件日期
2023-09-27 14:29:34 时间
这两天在做毕业设计,使用的是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-1 if (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-51 sizeOrDir:23-38 fileName: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-1 String 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(); else SwingUtilities.invokeLater(runnable); }
因为该代码只是截取一部分,有很多类都没有写出来,但是关注的就是核心代码
step3:结果展示
河北稳控科技多通道振弦传感器无线采集仪通过短信和FTP文件修改参数 可以通过无线振弦采集仪的参数“ 检测服务器上的 PARSCMD$.txt 文件” 来控制是否在每次数据发送完成后检测FTP 服务器上的参数修改文件并执行文件内的参数修改指令。若设置此参数值为“ 是” ,则设备在发送完数据后会主动连接 FTP 服务器参数指定的地址,并在 FTP 服务器上检索是否有针对此设备的参数修改文件,若有则下载后执行,并在执行完毕后删除 FTP 服务器上的文件。
python 使用ftplib连接ftp服务器获取目录、文件及它们的修改时间 * 获取当前路径或者指定路径下的文件、目录 * 检查指定路径是目录还是文件 * 根据目录、文件的修改时间来判断是否下载ftp的文件。 由于ftplib中的FTP无法满足我这一需求,所以只能重写一个MyFTP类继承FTP,写一个方法来实现,除了这个还实现了一个获取当前目录下的所有目录及文件。
字节卷动 You will never know how excellent you are unless you impel yourself once.
相关文章
- 文件上传之跨服务器上传代码
- JS 文本 写入文件并下载
- C#WinForm开发:如何将图片添加到项目资源文件(Resources)中
- Linux 下面删除指定日期之前文件的办法
- 通过HttpURLConnection 上传和下载文件(二)
- 查找指定日期创建的文件
- (图文详细)如何使用Code::Blocks运行c/cpp文件?
- 打开远程桌面保存成rdp文件
- 使用Struts 2框架实现文件下载
- 第9.6节 Python使用read函数读取文件内容
- shell脚本,将多行内容写入文件中,利用crontab开机启动
- Android 资源文件中的符号含义与说明
- [LeetCode] 388. Longest Absolute File Path 最长的绝对文件路径
- C# wpf 使用资源文件 resx
- fileinclude(通过cookie赋值的文件包含)
- 【网络安全】文件上传绕过思路