2012-11-04 33 views
19

java.io.IOException dường như là loại ngoại lệ phổ biến nhất, tình cờ, nó có vẻ cũng là mơ hồ nhất. Tôi tiếp tục nhìn thấy throws IOException bất cứ khi nào viết bằng ổ cắm, tệp, & c. Tôi chưa bao giờ thực sự có một người bắn vào tôi, tuy nhiên, vì vậy tôi tự hỏi nó là cái gì được cho là để bắn ra ngoại lệ. Tài liệu không hữu ích khi giải thích những gì đang xảy ra:Java - Điều gì ném một IOException

Tín hiệu cho thấy một ngoại lệ I/O đã xảy ra. Lớp này là lớp ngoại lệ chung được tạo ra bởi các hoạt động I/O bị lỗi hoặc bị gián đoạn.

Ai đó có thể vui lòng giải thích một số trường hợp tại đó một IOException sẽ bị ném hoặc cách nó được sử dụng.

+3

Một 'IOException' chỉ là, ngoại lệ đầu vào hoặc đầu ra. Khi mọi người sử dụng chúng, họ thường chỉ khái quát một lỗi cụ thể hơn. [API] (http://docs.oracle.com/javase/6/docs/api/java/io/IOException.html) có danh sách tất cả các loại ngoại lệ IO khác nhau được tích hợp vào Java SE 6. – Jon

+0

Tôi biết IOException là gì, tôi chỉ muốn một số kịch bản mô tả đầy đủ hơn khi chúng xảy ra. – Zaq

Trả lời

36

Giả sử bạn là:

  1. Đọc một tập tin mạng và bị ngắt kết nối.
  2. Đọc tệp cục bộ không còn khả dụng nữa.
  3. Sử dụng một số luồng để đọc dữ liệu và một số quy trình khác đã đóng luồng.
  4. Cố gắng đọc/ghi tệp nhưng không được phép.
  5. Cố gắng ghi vào một tệp nhưng không gian đĩa không còn khả dụng nữa.

Có nhiều ví dụ khác, nhưng đây là những ví dụ phổ biến nhất, theo kinh nghiệm của tôi.

5

Nói chung, I/O có nghĩa là Đầu vào hoặc đầu ra. Những phương thức này ném IOException bất cứ khi nào một thao tác đầu vào hoặc đầu ra không thành công hoặc được giải thích. Lưu ý rằng điều này sẽ không được ném cho đọc hoặc ghi vào bộ nhớ vì Java sẽ tự động xử lý nó.

Dưới đây là một số trường hợp dẫn đến IOException.

  • Đọc từ một InputStream đóng
  • Hãy cố gắng truy cập vào một tập tin trên internet mà không có một kết nối net
2

tài liệu Java là hữu ích để biết nguyên nhân gốc rễ của riêng IOException

Chỉ cần có xem direct known sub-interfaces của IOException từ trang tài liệu:

ChangedCharSetException, CharacterCodingException, CharConversionException, ClosedChannelException, EOFException, FileLockInterruptionException, FileNotFoundException, FilerException, FileSystemException, HttpRetryException, IIOException, InterruptedByTimeoutException, InterruptedIOException, InvalidPropertiesFormatException, JMXProviderException, JMXServerErrorException, MalformedURLException, ObjectStreamException, ProtocolException, RemoteException, SaslException, SocketException, SSLException, SyncFailedException, UnknownHostException, UnknownServiceException, UnsupportedDataTypeException, UnsupportedEncodingException, UserPrincipalNotFoundException, UTFDataFormatException, ZipException

Hầu hết các trường hợp ngoại lệ này đều tự giải thích.

ít IOExceptions với nguyên nhân gốc rễ:

EOFException: Tín hiệu đó kết thúc của tập tin hoặc cuối dòng đã đạt tới bất ngờ trong đầu vào. Ngoại lệ này chủ yếu được sử dụng bởi các luồng dữ liệu đầu vào để báo hiệu kết thúc luồng

SocketException: Được cho là có lỗi khi tạo hoặc truy cập Ổ cắm.

RemoteException: Một ngoại lệ từ xa là siêu lớp chung cho một số ngoại lệ liên quan đến giao tiếp có thể xảy ra trong khi thực hiện cuộc gọi phương thức từ xa. Mỗi phương thức của một giao diện từ xa, một giao diện mở rộng java.rmi.Remote, phải liệt kê RemoteException trong mệnh đề ném của nó.

UnknownHostException: Được cho là không thể xác định địa chỉ IP của máy chủ. (bạn có thể không được kết nối với internet)

MalformedURLException: Được cho biết để cho biết rằng URL không đúng định dạng đã xảy ra. Không thể tìm thấy giao thức pháp lý nào trong chuỗi đặc tả hoặc chuỗi không thể được phân tích cú pháp.

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