我正在尝试使用 FTP 协议通过 URI 访问文件。出于明显的安全原因,我不得不进行一些更改,但这似乎是问题的来源。
我的URI如下:
ftp://user:pasword@host.net/u/Bigpathname/XYZ/ABC/BigPathname/bigpathname/xyz/abc/MY_LOG.LOG
我看到了这个例外:
sun.net.ftp.FtpProtocolException: CWD Bigpathname:501 “Bigpathname”中的限定符超过 8 个字符
这真的很令人困惑,因为我可以使用 CD 命令从 Windows 7 命令行访问该文件。一次一个目录和一个完整路径。
我发现一篇文章提到 MVS 文件名必须是 8 个或更少的字符,但这并不能解释我如何从命令行访问这些相同的文件!它们确实存在,那里有我可以下载手册的数据,但我无法通过 Java 中的 URI 到达那里。
PS 我使用 .toURL().openStream() 在我的本地机器上获取文件就好了,只有当我尝试从我的服务器获取它们时它才会失败。
编辑 10 月 1 日
我可以使用 FileZilla 和 Windows 7 命令行中的基本 FTP 客户端访问 MVS 主机上的文件 - 但我仍然无法从 URI/URL 获取它们。我下载了一个非常基本的 Java 构建的 FTP 客户端,并尝试从那里访问我的程序中的同一个文件,并且路径有效,但是因为我的文件名中有一个点“MY_LOG.LOG”,所以我对此File does not exist 501 Invalid data set name "MY_LOG.LOG". Use MVS Dsname conventions.
感到非常困惑.. .
编辑十月 1 日下午 :)
好的,我终于让它在我的 Java 代码中与 FTP 客户端一起工作——但我仍然想使用 URL 类,因为我在本地和远程机器上都有日志。有没有办法对 URL 字符串进行编码,以便它可以使用 FTP 协议从远程计算机检索文件?我不确定它在 Java URL 类中是如何工作的,但在 FTP 客户端中,我必须使用 CWD,然后使用 RETR 命令。
如果我能做到这一点,那么我就有一个获取所有日志的解决方案,否则我将不得不检测它是文件还是 ftp URL,然后表现不同。不是世界末日,但不是我想要的……
尝试仅使用 URL 获取文件的代码如下:(sysc 是有效主机)
void testFTP()
{
String ftp = "ftp://user:pword@sysc/u/Xxxxxxxxxx/ICS/YT7/XxxxxXxxxxxxx/xxxxxxxxx/logs/xxxxxxxx/XX_YT.LOG";
try
{
URI uri = new URI(ftp);
URL ftpFile = uri.toURL();
BufferedReader in = new BufferedReader(new InputStreamReader(ftpFile.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}