2012-01-02 30 views
5

Tôi biết cách cắt bớt tệp RandomAccess để các byte ở cuối được xóa.Java RandomAccessFile cắt ngắn từ đầu

raf.getChannel().truncate(file.length() - 4); 

hoặc

raf.setLength(file.length() - 4); 

Nhưng làm thế nào để cắt một RandomAccessFile theo cách như vậy mà byte lúc bắt đầu được lấy ra? Tôi không cần phải viết nội dung của tập tin này vào một tập tin mới. Tôi googled và không thể tìm thấy một câu trả lời. Hãy giúp tôi. Cảm ơn trước.

Trả lời

5

Đây không phải là hoạt động hỗ trợ hầu hết các hệ thống tệp. Mô hình là một chuỗi các byte bắt đầu từ một vị trí cụ thể trên đĩa. Các tệp có chiều dài biến đổi và có thể được nối thêm và do đó việc cắt ngắn tương đối dễ dàng từ đó.

Vì vậy, bạn thực sự cần sao chép tất cả các byte trong tệp. Nếu có thể tránh được. Một kỹ thuật để quản lý các tệp hàng đợi (chẳng hạn như nhật ký), là có một chuỗi các tệp, sau đó bắt đầu một tệp mới theo định kỳ và thả một tệp ra khỏi phần cuối.

+0

Cảm ơn người đứng đầu @Tom. Tôi đã tiếp tục với những điều sau đây bằng cách sử dụng thông tin của bạn. fc.transferTo (tìm kiếm, file.length() - tìm kiếm, fcTmp); – prageeth

+0

cũng quá tệ. hệ thống tập tin chạy trên phương tiện flash sẽ là lý tưởng cho một "cắt ngắn từ đầu" do số lượng hạn chế của các chu kỳ xóa. – Michael

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