2013-01-17 66 views
4

我有一個Java代碼,用於將大型機上的FTP文件傳輸到本地系統。問題是如何判斷給定的路徑是文件還是文件夾?由於我不知道可能的擴展名是什麼,因此我無法使用擴展名檢查。另外,下面的代碼始終返回false,檢查大型機FTP服務器上的路徑是否是文件或文件夾。

fileSystem.isFile("fileName"); 

作爲一個大型的文件系統,路徑是由.,而不是/,因此在年底也不起作用了.檢查分隔。

我再次使用

url="connection url of the mainframe" 
bufferedInputStream = new BufferedInputStream(url.getInputStream()); 

當我有在源路徑的文件,將其寫入文件到目的地的內容流從輸入路徑輸出的位置數據,並且當所述源路徑具有目錄中,它將目錄中文件的名稱和其他屬性寫入目標。

當源是一個目錄示例輸出

Name VV.MM Created  Changed   Size Init Mod Id 
QQQQ 01.00 2009/12/18 2009/12/18 12:15 18 18  0 XXXX 
RRRR 01.00 2009/12/18 2009/12/18 12:16  19  19 0 XXXXX 

如何確定如果源路徑是一個文件或文件夾?

+2

其實這可能不是一個重複的問題,確切或其他。有兩個主機文件系統,即「Unix文件系統」和「經典文件系統」。前者表現得像「普通」的Unix。後者沒有目錄。 FTP啓動任務中有一些語法糖,使得它看起來像可以更改目錄,但是您實際上只是修改了用於對您看到或創建的數據集進行子集化的限定符。 – cschneid

+2

同意。 「大型機」標籤可以阻止重複問題。對於在服務器是z/OS的情況下使用FTP的人來說,這是一個嚴重的問題。我已經投票重新開放它了,並且我要求所有其他觀看這個空間的主機也都贊同它。 – zarchasmpgmr

+0

謝謝@cschneid和@ zarchasmpgmr .. – RadAl

回答

1

我找到了一種方法,以確定是否對大型機的路徑是一個文件或PDS(類比目錄)。我使用org.apache.hadoop.fs.ftp.FTPFileSystem庫,下面的代碼片段可以通過返回文件列表來工作。

FTPFile[] files = ftp.listFiles(); 

循環通過files和檢查file1.isFile()就足夠了。 再次記住在列出文件之前切換到當前工作目錄ftp.cwd(inputPath);

有關大型機文件系統的說明,請參閱Bruce Martin的回答以及後面的註釋。 。

0

你不說你正在使用的是什麼版本的Java,或者你是否使用了一個特殊的主機文件系統庫。

你可以用java.io.File#isDirectory()代替嗎?

+0

我使用Java 6.和'java.io.File#isDirectory()'也不能工作.. – RadAl

2

我沒有答案,但它聽起來像你正在接觸Zos。對於那些誰不 知道ZOS

  • zOS上什麼東西目錄
  • 什麼他號召目錄可能是一個PDS(見PDS在Dataset)。對於不是來自大型機背景的人,可以將其視爲一種歸檔(即jar,Tar,zip等)。這不是一個完全準確的描述,PDS有一些限制&使用jar文件不要,但是一個jar文件是PC中最接近的比喻,* NIX世界我能想到的。

  • 你怎麼發現他們 - 不知道,有可能是一個文件屬性可以訪問

+0

z/OS最明顯_does_有目錄。看看z/OS Unix系統服務。 FWIW,z/OS v1r2及更高版本符合Unix95產品標準:http://www.opengroup.org/openbrand/register/ibm.htm。話雖如此,當你說「他所稱的目錄可能是PDS [...]」時,你是正確的,你的比喻是一個很好的例子。 – cschneid

+0

cschneid,是的,你是對的,我傾向於忘記Unix系統服務 - 永遠不會使用它們,也不太清楚Clasic -MVS/ZOS結構如何映射到ZOs的Unix端。另外問題是Clasic -MVS/ZOS。關於一個側面的問題,請注意java是如何使用它的jar文件的,它總是讓我想起在大型機上如何使用加載庫 - 另一種情況是什麼舊的又變成了新的 –

相關問題