2011-08-24 58 views
1

我已連接到ftp位置使用;如何將字節數組轉換爲文件

URL url = new URL("ftp://user:[email protected]/" + file_name +";type=i"); 

我把內容讀到一個字節數組中,如下所示;

byte[] buffer = new byte[1024]; 
int count = 0; 
while((count = fis.read(buffer)) > 0) 
{ 
    //check if bytes in buffer is a file 
} 

我希望能夠檢查是否在buffer字節是文件沒有明確地傳遞一個特定的文件寫入到它像;

File xfile= new File("dir1/"); 
    FileOutputStream fos = new FileOutputStream(xfile); 
    fos.write(bytes); 

    if(xfile.isFile()) 
    { 

    } 

在一個理想的世界裏是這樣的;

File xfile = new File(buffer);//Note: you cannot do this in java 
    if(xfile.isFile()) 
    { 

    } 

isFile()是檢查從ftp讀取的字節文件。我不想通過明確的文件名,因爲我不知道ftp位置上的文件的名稱。

任何解決方案可用?

+2

你是什麼意思isFile()?您的意思是有效的內容,例如一個Excel工作表? Java不知道這一點。 – ZeissS

+3

你的問題沒有多大意義。 'File.isFile()'檢查文件的路徑名是否表示服務器文件系統中的常規文件(而不是目錄)。你的字節數組的內容可以是任何東西,但不管它是什麼,一旦你把它寫入你的硬盤,它就成爲一個文件(即文件的內容)。沒有可能的內容在您寫入時無法成爲文件。 –

+0

'@ ammoQ'編輯 – Bitmap

回答

1

沒有辦法輕鬆做到這一點。

文件是磁盤上的字節數組,如果將其寫入磁盤,則字節數組將成爲文件。沒有可靠的方法來告訴什麼在您剛收到的數據中,而不分析數據並檢查是否可以在其中找到有效的文件頭。

0

isFile()文件在哪裏意味着從ftp流獲取的內容是一個文件。

答案很簡單。你不能這樣做,因爲它沒有任何意義。

  • 你從流中讀取的是存儲在內存中的字節序列。

  • 文件是存儲在磁盤(通常)上的字節序列。

這些不是一回事。 (或者,如果你想獲得的所有理論/哲學,你必須回答這個問題:「當是一個字節序列的文件,並且當它不是一個文件」。


現在,一個更合理的問題要問可能是:

我怎麼知道,如果我拿來用FTP的東西是FTP服務器上的文件的內容

(...從目錄中渲染不同的或東西)。

答案是,你不能確定你是否通過打開URLConnection到FTP服務器來獲取文件......就像你已經完成了一樣。這就像問「是」(123)555-5555'電話號碼?「。它可能是的電話號碼,或者它可能只是一串看起來像電話號碼的字符。

2

什麼是文件

計算機文件是一個任意信息塊,可用於計算機程序,通常基於某種持久存儲。一個文件是持久的,因爲它仍然可用於程序在當前程序完成後使用。指存儲在字節數組中

你的字節將是文件的一部分,如果你把它們寫在某種持久存儲的。

當然,我們常說,我們文件或文件,但基本上我們從文件中讀取寫字節字節文件

所以我們不能測試一個字節數組是否它的內容是一個文件。簡單地說,因爲每個字節數組都可以用來創建一個文件(甚至是一個空數組)。 (1)讀取字節和(2)文件名,(3)發送字節和(4)文件名,以便客戶端可以(5)讀取文件字節和(6)文件名,並使用這兩個數據集來(7)創建一個文件。 FTP服務器沒有來訪問一個文件,它可以從數據庫中獲取字節和名稱或在內存中創建兩個文件...

+0

如何檢索文件名?謝謝。 – Bitmap

+0

其實取決於服務。通過FTP,客戶端*知道併發送*文件名。它可能首先請求一個文件名列表(一些* dir *命令) –

相關問題