【发布时间】:2018-03-22 02:02:01
【问题描述】:
FTP 和 SFTP 是不同的,但我想知道 FTP 中是否有等效于 SFTP 的“SYST”命令。如果我有一个使用 JSch 的 SFTP 连接并且我想返回系统类型,我该怎么做?我正在将 FTP 连接转换为 SFTP。如果无法使用 SFTP,是否有解决方法?
public String getSystemType()
throws IOException, FtpException
{
if(out == null)
return null;
acquire(); // Acquire the object
try {
ftpCommand("SYST"); //sends command to FTP to retrieve the system type.
if(!reply.substring(0, 3).equals("215"))
throw new FtpException(reply);
} finally {
release(); // Release the object
}
return reply.substring(4);
}
我需要这种“系统类型”来解析来自某个位置的文件或目录信息的结果。它可以是 Windows 服务器或 UNIX 服务器。根据我需要解析它来检索
1) 名称
* 2) 权限..在 MSDOS 格式列表中不可用
* 3) 类型
* 4) Owner ..在 MSDOS 格式列表中不可用
* 5) Group ..在 MSDOS 格式列表中不可用
* 6) 尺寸
* Parse a UNIX format list. With skipping number of lines.
* The columns of a typical UNIX format list is like:
* drwxr-xr-x 6 appli appli 1024 May 17 20:33 java
* -rw------- 1 appli appli 1005 May 1 21:21 mp3list
* drwxr-xr-x 5 appli appli 1024 May 17 16:56 perl
* drwxr-xr-x 6 appli appli 1024 Apr 30 23:18 public_html
// Some UNIX format list doesn't contain the column for group like this:
// -rw-r--r-- 1 daemon 0 Dec 7 10:15 .notar
// -r--r--r-- 1 daemon 828 Mar 30 1995 HOW_TO_SUBMIT
// -r--r--r-- 1 daemon 627 Mar 30 1995 README
// -r--r--r-- 1 daemon 876 Mar 30 1995 WELCOME
// drwxr-xr-x 2 ftp 512 Oct 13 1999 bin
【问题讨论】:
-
您真的需要那种系统类型,还是只是提供信息?你可以用一些虚拟文本替换返回值并且它仍然可以工作吗?因为依赖于远程服务器系统描述的代码对我来说似乎有点脆弱。
-
@cello 还有另一个函数,它执行“LIST”以返回有关文件或目录的信息。它用于解析返回字符串,我在旧的 FTP 类中有一个方法,它可以验证它是 UNIX 格式还是 MS-DOS 格式。我不确定 SFTP 中是否需要这样做。我只是试图保持方法不变,只将其中的进程转换为 SFTP。
-
我不明白您的编辑(关于解析有关文件或目录的信息)与您的问题有什么关系。
-
@MartinPrikryl 我的意思是,根据系统类型,我会以不同的方式解析数据,因为每个系统发送文件和目录信息的方式略有不同。我会确定它是哪个系统,所以如果是 UNIX,那么我知道它有 9 列,如果是 Windows,那么只能从中获得 3 列,名称、类型和大小。