tôi có mã Java làm như sau:java.nio.file.Files.isWriteable không đồng ý với java.io.File.canWrite()
- Tạo một file trống tạm thời với phần mở rộng ZIP sử dụng
File.createTempFile()
- Xóa nó với
File.delete()
(chúng tôi chỉ thực sự muốn có nó để tạo ra một tên tập tin tạm thời) - Sao chép một "mẫu" tập tin ZIP với các đường dẫn tương tự với
com.google.commons.io.ByteStreams.copy()
sử dụng mớiOutputSupplier
đưa ra cùng filename - Sửa đổi các bưu điện lưu trữ (xóa trực tiếp ory) sử dụng TrueZIP 7.4.3
Trên một hệ thống cụ thể, bước 4 thất bại liên tục với FsReadOnlyArchiveFileSystemException - "This is a read-only archive file system!"
(xem http://java.net/projects/truezip/lists/users/archive/2011-05/message/9)
Gỡ rối mã TrueZIP, tôi nhận thấy như sau:
- Có không có tệp mở nào xử lý tệp này giữa bất kỳ bước nào ở trên và đặc biệt không phải trước bước 4
- Kiểm tra cùng một tệp với File.canWrite() thay vì NIO trả về cùng một thời điểm (sử dụng trình gỡ lỗi). cái đó nó là ghi
Dưới đây là những gì bạn thấy trong danh sách biểu debugger:
fn => "C:/myworkdir/temp/myfile4088293380313057223tmp.zip"
java.nio.file.Files.isWritable(java.nio.file.Paths.get(fn)) => false
new java.io.File(fn).canWrite() => true
Sử dụng JDK 1.7.04
Bất kỳ ý tưởng?
Tôi sẽ thử bản cập nhật Java 7 7 để xem lỗi của nó đã được sửa chưa. –
Tôi sẽ tránh sử dụng cả hai API và thay vào đó dựa vào các ngoại lệ được ném bằng ví dụ: 'FileOutputStream() mới '. – EJP
tôi sẽ không sử dụng java 7, để bắt đầu với – njzk2