Giả sử tôi muốn nhận được một số thuộc tính của tệp (chủ sở hữu, kích thước, quyền, thời gian) khi được trả về bởi lệnh gọi hệ thống lstat(). Một cách để làm điều này trong Java là tạo một đối tượng java.io.File và thực hiện các cuộc gọi như length(), lastModified(), v.v. trên đó. Tôi có hai vấn đề cho đến thời điểm này:Unix stat()/lstat() cho Java
Mỗi cuộc gọi này kích hoạt lệnh stat() và cho mục đích của tôi stat() được coi là đắt đỏ: Tôi đang cố quét hàng tỷ tệp song song hàng trăm máy chủ, và (đến một xấp xỉ đầu tiên) cách duy nhất để truy cập các tập tin này là thông qua NFS, thường chống lại các cụm filer mà stat() dưới tải có thể mất nửa giây.
Cuộc gọi không phải là lstat(), thường là stat() (theo sau liên kết tượng trưng) hoặc fstat64() (mở tệp và có thể kích hoạt thao tác ghi để ghi lại thời gian truy cập).
Có cách nào "đúng" để thực hiện việc này, sao cho tôi chỉ thực hiện một cuộc gọi lstat() duy nhất và truy cập các thành viên của chỉ số struct? Những gì tôi đã tìm thấy cho đến nay từ Googling:
JDK 7 sẽ có giao diện PosixFileAttributes trong java.nio.file với tất cả mọi thứ tôi muốn (nhưng tôi thà không được chạy đêm xây dựng của JDK của tôi nếu tôi có thể tránh nó).
Tôi có thể cuộn giao diện của riêng mình bằng JNI hoặc JNA (nhưng tôi không muốn nếu có giao diện hiện tại).
Một previous similar question có một vài gợi ý JNI/triển khai JNA. Một cái đã biến mất và cái còn lại được duy trì một cách có vấn đề (ví dụ: không tải xuống, chỉ là một kho lưu trữ hg).
Có tùy chọn nào tốt hơn không?
Cảm ơn! Cuối cùng tôi đoán JDK 7 không quá tệ; Tôi chỉ có thể giữ các tệp nhị phân bằng công cụ mà tôi đang viết, và nó sẽ là phần mềm cấp sản xuất sớm đủ. –