A. 有關java上傳和File以及FileInputStream的區別
file不屬於流,它只是用來屏閉不同文件系統,用來統一
描述文件的實體bean,new
file時給它傳入文件名稱或是路徑,它就會去根據參數查找對應的文件屬性然後封裝
成實體。用來處理判斷該路徑是一個文件還是路徑,文件或路徑的許可權,修改時間等等,路徑的子路徑list等等目錄操作。
file不屬於文件流,只能代表一個文件或是目錄的路徑名而已.
而fileinputstream關注的是文件的內容,是用來進行文件讀寫等操作的二進制流類。大多數情況下,構造fileinputstream
時傳遞一個file對象做參數,也可以直接傳遞string的文件路徑。
這個容易混淆的問題在ftp時候很容易出現,因為客戶端點擊瀏覽本地文件後在上傳時在伺服器端如果直接把客戶端的
文件名稱拿到,然後用new
file(「文件名稱路徑」),再用new
inputstream(file)來上傳到ftp的話,其實就是相當於伺服器
端在伺服器本地找file(「文件名稱路徑」),然後往ftp上傳,這是錯誤的。我們希望的是上傳客戶端的文件,而不是
伺服器端的文件,所以這里應該是直接用apache的fileitem.getinputstream的結果直接upload,如下:
inputstream
filein
=
item.getinputstream();////如果直接寫成這樣new
fileinputstream(filepath);就會出現在伺服器本機找file上傳的問題
//可以查看item.getinputstream()最後其實是從memoryoutputstream(內存里記憶的客戶端文件流)來取流的句柄的。
B. java 怎麼獲取上傳文件的大小
用InputStream打開該文件。
InputStream in =new FileInputStream("sdf.txt");
int size=in.available()
得到了size就是你該文件的位元組數