Trong trường hợp nào sẽ java.util.zip.ZipFile.close() ném một IOException? Chữ ký phương thức của nó chỉ ra rằng nó có thể được ném, nhưng từ mã nguồn thì dường như không có nơi nào mà điều này có thể xảy ra, trừ khi nó nằm trong mã gốc. Hành động khắc phục, nếu có, có thể được thực hiện tại thời điểm ngoại lệ bị bắt?khi nào java.util.zip.ZipFile.close() ném IOException?
Trả lời
Từ API docs on ZipFile.close()
:
Đóng file ZIP này sẽ đóng cửa tất cả các đầu vào trước suối trả về bởi lời gọi của phương pháp
getInputStream
.
và InputStream.close()
ném một số IOException
, vì vậy ZipFile.close()
cũng phải ném nó. Theo số API docs for InputStream.close()
, nó ném một số IOException
"nếu xảy ra lỗi I/O". Đó không phải là rất mô tả nhưng nó đúc một mạng lưới rộng. InputStreams có thể đại diện cho các luồng đến từ hệ thống tập tin, mạng, bộ nhớ, vv InputStreams có thể liên quan đến bộ đệm cần được xóa, ổ cắm cần được đóng, tài nguyên cần được giải phóng, khóa cần được giải phóng, vv. xảy ra vì nhiều lý do.
Từ người đàn ông gần (2):
Không kiểm tra giá trị trả lại gần() là một lỗi lập trình phổ biến nhưng vẫn nghiêm trọng. Có thể là các lỗi trên thao tác ghi trước (2) được báo cáo lần đầu tiên ở lần đóng cuối cùng(). Không kiểm tra giá trị trả lại khi đóng tệp có thể dẫn đến mất dữ liệu im lặng. Điều này đặc biệt có thể được quan sát với NFS và với hạn ngạch đĩa.
Trong khi đóng một luồng chỉ đọc không thể ném, khung IO của java không thể kiểm tra vì nó không có kiểm tra tĩnh đọc và viết luồng. – Joshua
Tôi không chắc chắn nhưng tôi nghĩ IOException được ném khi một trong các sự kiện sau đây xảy ra:
- Các file zip đã bị xóa bởi một cái gì đó/một người nào đó bên ngoài của ứng dụng.
- Khi ổ đĩa có chứa các tập tin zip được gỡ bỏ/ngắt kết nối
Rất nhiều sự kiện có thể là lý do nhưng đó là những chỉ có hai tôi có thể nghĩ ra ngay bây giờ.
Nhưng tại sao một trong hai điều kiện đó lại gây ra lỗi khi đóng một ZipFile chỉ đọc? – EJP
Tôi đã không đề cập rằng đó là những điều kiện duy nhất để ném ngoại lệ. –
Các tài liệu cho ZipFile.close()
nói:
Đóng file ZIP này sẽ đóng cửa tất cả các đầu vào suối trước đây được trả về bởi lời gọi của phương pháp getInputStream.
Có lẽ phương thức gốc close
đang tiến hành đóng InputStream.
Phương thức close
của InputStream
có IOException
làm ngoại lệ đã kiểm tra.
Nguyên nhân có khả năng nhất là
ngoài điều kiện không gian trên hệ thống tệp nơi tệp zip đang được viết
lỗi trong hệ thống tệp cơ bản. Trừ khi bạn có thể xác định nguyên nhân và làm việc xung quanh nó trên bay, tất cả những gì bạn có thể làm là báo cáo điều kiện cho người dùng.
Khi sử dụng 'InputStream', bạn đang * đọc *, chứ không phải * ghi *, do đó hết dung lượng đĩa do tệp zip được ghi không thể là nguyên nhân của' IOException' trong hoàn cảnh của cuộc thảo luận này . – Asaph
Cảm ơn, đã sửa. –
- 1. làm thế nào để ném một IOException?
- 2. Có bao giờ ném một IOException?
- 3. Java - Điều gì ném một IOException
- 4. Tôi nên làm gì nếu một IOException được ném?
- 5. Quy tắc JUnit TemporaryFolder tùy ý ném một IOException
- 6. Buộc IOException trong khi đọc tệp
- 7. Việc cần làm khi ServerSocket ném IOException và giữ máy chủ chạy
- 8. IOException vs TimeoutException
- 9. Gửi email nhật ký log4net dưới dạng System.Net.Mail.Attachment ném IOException (quá trình bị khóa)
- 10. Cách quản lý giao dịch (bao gồm Tệp IO) khi một IOException được ném từ phương thức đóng tệp
- 11. Android Geocoder.getLocationFromName() ném IOException: Dịch vụ không khả dụng trên Thiết bị
- 12. WebRequest.Create ném IOException "Khóa đăng ký được chỉ định không tồn tại".
- 13. Tạo rồi xóa nguyên nhân tệp IOException
- 14. Làm thế nào để viết một bài kiểm tra đơn vị để bao gồm trường hợp một IOException được ném?
- 15. IOException - Không thể tải tệp
- 16. Khi trả lại bool, hãy ném ngoại lệ và ngoại lệ nào để ném
- 17. IOException: Quá nhiều tệp đang mở
- 18. Khi nào bạn sẽ ném một DomainException trong PHP?
- 19. Bối rối về khi nào nên ném một ngoại lệ
- 20. Khi nào thì ConcurrentModificationException được ném vào GAE?
- 21. Khôi phục từ IOException: tên mạng không còn có sẵn
- 22. IOException Tôi không thể bắt được
- 23. Parcelable gặp IOException viết đối tượng serializable
- 24. Java socket IOException - quyền bị từ chối
- 25. Android - Chỉ đọc Hệ thống tệp IOException
- 26. Trả lại sau khi ném ngoại lệ
- 27. Gson.toJson ném NullPointerException khi kích thước tệp> 1GB
- 28. Nhận IOException khi chạy mã mẫu trong “Mahout in Action” trên mahout-0.6
- 29. Gửi email khi ngoại lệ bị ném
- 30. Tại sao tôi nhận được "NoSuchMethodException" & "IOException khi cố gắng để marshall", lỗi?
Nếu ngoại lệ được ném vào một cuộc gọi read() hoặc write(), tôi có thể hiểu rằng việc đọc hoặc ghi không thành công. Nhưng nếu ngoại lệ được ném vào gần(), những gì đã thất bại? –