假設我想獲取由lstat()系統調用返回的文件的幾個屬性(所有者,大小,權限,次數)。在Java中執行此操作的一種方法是創建一個java.io.File對象,並對其執行諸如length(),lastModified()等調用。我有兩個問題至今:用於Java的Unix stat()/ lstat()
這些調用中的每一個觸發的stat()調用,併爲我的目的STAT()s被認爲昂貴的:我試圖掃描數十億個文件的並行上數百臺主機和(到第一次近似)訪問這些文件的唯一方法是通過NFS,通常針對加載了stat()的文件集羣可能需要半秒鐘的時間。調用不是lstat(),它通常是stat()(它遵循符號鏈接)或fstat64()(它打開文件並可能觸發寫操作來記錄訪問時間)。
有沒有一種「正確」的方式來做到這一點,這樣我最終只做一個lstat()調用並訪問struct stat的成員?我從谷歌搜索迄今發現:
JDK 7將在java.nio.file的一切我想要的PosixFileAttributes接口(但如果我可以,我寧願不進行夜間運行構建我的JDK躲開它)。
我可以用JNI或JNA推出我自己的界面(但是如果存在現有界面,我寧願不要)。
A previous similar question得到了幾個建議的JNI/JNA實現。一個消失了,另一個維護得可疑(例如,沒有下載,只是一個hg存儲庫)。
那裏有更好的選擇嗎?
謝謝!最終我猜JDK 7並不是那麼糟糕;我可以使用我正在編寫的工具保留二進制文件,並且很快就會生成級別的軟件。 – 2009-12-16 13:34:57