2011-01-24 51 views
6

Tôi cần thực hiện rất nhiều thứ với tài nguyên khi đang chạy: phân tích cú pháp tài liệu xsd/xml, xây dựng và biên dịch các lớp java, đóng gói chúng thành các cuộc chiến tranh, tồn tại trong DB, triển khai chúng dưới dạng OSGi, v.v.Cấu trúc tệp Java trong bộ nhớ?

Hầu hết các thư viện/API, mà tôi sử dụng, cho phép thực hiện tất cả các tác vụ trung gian này trong bộ nhớ, nhưng có một số thư viện "đặc biệt" chỉ hoạt động với java.io.File. Và không có gì còn lại cho tôi, nhưng sử dụng các tệp và thư mục tạm thời thực sự không tốt trong môi trường Java EE.

Tôi tin rằng phải có thư viện/giải pháp cho cấu trúc tệp trong bộ nhớ có các nút mở rộng java.io.File (như tôi thấy). Vui lòng thả liên kết tới các thư viện đã biết/tương tự. Mọi bình luận đều được chào đón.

Cảm ơn!

+0

Tôi tin rằng đây là nhiều hay ít cùng một câu hỏi như http://stackoverflow.com/questions/578305/create-a-java-file-object-or-equivalent-using-a-byte-array-in- memory-without-a –

+0

@ Chris Thompson, tôi đã đọc nó trước khi đăng. Điều này thực sự không phải là cùng một imho. – Osw

+0

đủ công bằng, tôi có thể thấy điều đó một cách chắc chắn. Dù bằng cách nào, câu hỏi của bạn là một câu hỏi hay và tôi sẽ bị sốc nếu không có thứ gì ngoài đó để thực hiện điều này ... –

Trả lời

6

Tôi không tin rằng bạn sẽ tìm thấy những gì bạn đang tìm kiếm. API java.io.File không được viết với ý định cung cấp một trừu tượng hệ thống tệp có thể được triển khai theo nhiều cách khác nhau. Trong khi nó đưa ra phương thức cho một số hoạt động FS (chẳng hạn như xóa và mkdir), nó không xử lý I/O đọc/ghi cơ bản. Đó là để lại cho các lớp khác, chẳng hạn như FileInputStream. Điều này có nghĩa là từ quan điểm API, đối tượng Tệp không quá một đường dẫn. Không có gì là trừu tượng. Bạn bế tắc.

+0

Chụp tốt. Có chắc chắn rằng java.io.File không thực hiện I/O cơ bản không? Sau đó, tôi không có cơ hội: ( – Osw

+0

Vâng, đây là javadoc: http://download.oracle.com/javase/1.4.2/docs/api/java/io/File.html. Nếu lớp Tệp đang trừu tượng hóa I/Các phép toán O mà bạn mong đợi sẽ thấy các phương thức như getInputStream(), getOutputStream(), vv, tất nhiên là không có ở đó.Kể từ khi giới thiệu Java, những người khác đã viết các API hệ thống tệp thực sự có thể được triển khai theo nhiều cách khác nhau, nhưng điều đó không giúp ích cho việc sử dụng của bạn. –

+0

Chỉ cần xem qua các tệp FileInputStream. Bạn nói đúng, tôi bị mắc kẹt. – Osw

4

Một tùy chọn là sử dụng RAM disk. Chương trình của bạn sẽ nghĩ rằng nó sử dụng đĩa với java.io.File, nhưng nó thực sự sẽ sử dụng bộ nhớ chính.

+0

+1 để chỉ ra công cụ hiện có. Tuy nhiên, điều này vẫn không nhất thiết phải "vừa vặn" vào một môi trường "Java EE" ... bất kể đó là gì :) –

+0

@pst, Tại sao nó không "phù hợp" vào một môi trường "Java EE"? Nó chỉ là một FS bổ sung hệ thống máy chủ cung cấp. Anh ấy phải sử dụng một số đường dẫn để đọc và ghi các tệp của mình; nó cũng có thể được trên FS trong bộ nhớ. – Jay

+0

@Jay, cảm ơn cho ý tưởng, nhưng đó là một chút phần cứng/hệ thống công cụ trong khi tôi đã suy nghĩ về lớp trừu tượng phần mềm. – Osw

0

Có một thay thế tốt có sẵn: https://github.com/google/jimfs

này hỗ trợ java (7+) trong việc xử lý bộ nhớ hệ thống tập tin và rất dễ sử dụng quá.

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