2013-04-09 39 views
8

Có thể nhận và đặt siêu dữ liệu tùy chỉnh trên các phiên bản Tệp không? Tôi muốn sử dụng các tệp mà tôi xử lý thông qua hệ thống của mình dưới dạng một loại cơ sở dữ liệu rất đơn giản, trong đó mọi tệp phải chứa siêu dữ liệu tùy chỉnh bổ sung, chẳng hạn như email của người gửi, một số dấu thời gian, v.v.có thể đặt siêu dữ liệu tùy chỉnh trên các tệp, sử dụng Java không?

một hệ thống nội bộ, vì vậy bảo mật không phải là một vấn đề.

+0

Đối với một yêu cầu tương tự như tôi đã tạo ra một tập tin dữ liệu meta bổ sung cho tất cả các tập tin, tức là một tệp có tên 'report.pdf' có tệp' report.pdf.meta' chứa dữ liệu meta. Không ưa thích như sử dụng các thuộc tính mở rộng, nhưng nó hoạt động. –

Trả lời

6

Trong java 7, bạn có thể thực hiện việc này bằng cách sử dụng lớp PathUserDefinedFileAttributeView.

Dưới đây là ví dụ lấy từ đó:

kiểu MIME của một tập tin có thể được lưu trữ như một thuộc tính người dùng định nghĩa bằng cách sử dụng đoạn mã này:

Path file = ...; 
UserDefinedFileAttributeView view = Files 
    .getFileAttributeView(file, UserDefinedFileAttributeView.class); 
view.write("user.mimetype", 
      Charset.defaultCharset().encode("text/html"); 

Để đọc các thuộc tính định dạng MIME, bạn sẽ sử dụng đoạn mã này:

Path file = ...; 
UserDefinedFileAttributeView view = Files 
.getFileAttributeView(file,UserDefinedFileAttributeView.class); 
String name = "user.mimetype"; 
ByteBuffer buf = ByteBuffer.allocate(view.size(name)); 
view.read(name, buf); 
buf.flip(); 
String value = Charset.defaultCharset().decode(buf).toString(); 
+0

Điều gì xảy ra nếu bạn sử dụng 'UserDefinedFileAttributeView' với hệ thống tệp không hỗ trợ các thuộc tính mở rộng POSIX, tức là FAT? Nó được mô phỏng bằng cách nào đó? –

+0

Tôi không thể tìm thấy danh sách toàn diện, [this] (http://stackoverflow.com/questions/15319586/what-file-sytems-support-java-userdefinedfileattributeview) câu trả lời liệt kê một vài hệ thống tệp. Tôi đoán cách duy nhất để tìm ra là thử nó trên FAT và xem điều gì xảy ra. –

1

bạn nên thường xuyên kiểm tra xem hệ thống tập tin hỗ trợ UserDefinedFileAttributeView cho các tập tin cụ thể mà bạn muốn thiết lập Bạn chỉ có thể gọi này

Files.getFileStore(Paths.get(path_to_file))).supportsFileAttributeView(UserDefinedFileAttributeView.class); 

Từ kinh nghiệm của tôi, các UserDefinedFileAttributeView không được hỗ trợ trong FAT * và HFS + (cho MAC) hệ thống tập tin

Các vấn đề liên quan