从FTP服务器返回来的TelnetInputStream流中读取文件的文件名,文件大小,文件日期

简介: 这两天在做毕业设计,使用的是sun.net.ftp.FtpClient,其中有个难题就是怎么获取服务器中的文件列表并显示出来,终于弄出来了,现在写出来记录一下 step1:获取服务器文件列表的信息,返回一个TelnetInputStream TelnetInputStream list = ftpClient.

这两天在做毕业设计,使用的是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:结果展示



相关文章
|
3月前
|
存储 UED Windows
Windows服务器上大量文件迁移方案
Windows服务器上大量文件迁移方案
156 1
|
4月前
|
存储 监控 固态存储
【vSAN分布式存储服务器数据恢复】VMware vSphere vSAN 分布式存储虚拟化平台VMDK文件1KB问题数据恢复案例
在一例vSAN分布式存储故障中,因替换故障闪存盘后磁盘组失效,一台采用RAID0策略且未使用置备的虚拟机VMDK文件受损,仅余1KB大小。经分析发现,该VMDK文件与内部虚拟对象关联失效导致。恢复方案包括定位虚拟对象及组件的具体物理位置,解析分配空间,并手动重组RAID0结构以恢复数据。此案例强调了深入理解vSAN分布式存储机制的重要性,以及定制化数据恢复方案的有效性。
96 5
|
2月前
|
网络安全 Windows
Jetson 学习笔记(十五):FTP协议传输文件
本文介绍了如何使用WinSCP软件通过FTP协议在Windows和Jetson设备之间传输文件,并分享了一些操作经验和技巧。
30 0
Jetson 学习笔记(十五):FTP协议传输文件
|
2月前
|
Python
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
这篇博客文章是关于如何使用Flask框架上传特征值数据到服务器端,并将其保存为txt文件的教程。
31 0
Flask学习笔记(三):基于Flask框架上传特征值(相关数据)到服务器端并保存为txt文件
|
3月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
54 4
|
2月前
|
前端开发 Docker 容器
主机host服务器和Docker容器之间的文件互传方法汇总
Docker 成为前端工具,可实现跨设备兼容。本文介绍主机与 Docker 容器/镜像间文件传输的三种方法:1. 构建镜像时使用 `COPY` 或 `ADD` 指令;2. 启动容器时使用 `-v` 挂载卷;3. 运行时使用 `docker cp` 命令。每种方法适用于不同场景,如静态文件打包、开发时文件同步及临时文件传输。注意权限问题、容器停止后的文件传输及性能影响。
193 0
|
2月前
|
网络协议 文件存储 Windows
Windows Server 2019 FTP服务器搭建
Windows Server 2019 FTP服务器搭建
|
2月前
|
安全 网络协议 网络安全
Windows Server 2003 FTP服务器搭建
Windows Server 2003 FTP服务器搭建
|
4月前
|
Linux
Linux 服务器下载百度网盘文件
本教程指导如何使用 `bypy` 库从百度网盘下载文件。首先通过 `pip install bypy` 安装库,接着运行 `bypy info` 获取登录链接并完成授权,最后将文件置于指定目录并通过 `bypy downdir /Ziya-13b-v1` 命令下载至本地。
397 1
Linux 服务器下载百度网盘文件
|
2月前
|
弹性计算 关系型数据库 网络安全
阿里云国际版无法连接和访问Windows服务器中的FTP服务
阿里云国际版无法连接和访问Windows服务器中的FTP服务
下一篇
无影云桌面