我試圖通過使用FTP協議的URI訪問文件。出於明顯的安全原因,我不得不做出一些改變,但這是問題似乎來自的地方。FTP異常501「路徑名」超過8個字符
我的URI如下: ftp://user:[email protected]/u/Bigpathname/XYZ/ABC/BigPathname/bigpathname/xyz/abc/MY_LOG.LOG
而且我看到這個異常:
sun.net.ftp.FtpProtocolException: CWD Bigpathname:501 A qualifier in "Bigpathname" is more than 8 characters
這確實是令人困惑,因爲我可以用CD命令在Windows 7命令行訪問該文件只是精細。一次一個目錄和一個完整路徑。
我發現一篇文章提到MVS文件名必須是8個或更少的字符,但這並不能解釋我如何從命令行得到這些相同的文件!他們確實存在那裏有數據,我可以下載手冊,但我無法通過Java中的URI到達那裏。我使用.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.
我完全被這個困惑了。 ..
編輯Ocotober 1日下午:)
OK我終於得到它在我的Java代碼與一個FTP客戶端的工作 - 但我仍想使用URL類,因爲我有兩個本地日誌和遠程機器。有沒有辦法對URL字符串進行編碼,以便它可以通過FTP協議從遠程計算機檢索文件?我不確定它如何在Java URL類中工作,但在FTP客戶端中,我必須使用CWD,然後使用RETR命令。
如果我可以做到這一點,那麼我有一個解決方案來獲取我所有的日誌,否則我將不得不檢測它是一個文件或ftp URL,然後表現不同。世界上沒有結束,但不是我想要的......
,試圖獲得該文件只是一個URL的代碼如下:(SYSC是一個有效的主機)
void testFTP()
{
String ftp = "ftp://user:[email protected]/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();
}
}
能不能具體到你的服務器?您可以使用某個FTP客戶端進行檢查。 –
您可以發佈您正在使用的(匿名)代碼嗎?您沒有在路徑參數中包含用戶名和密碼,對嗎? –