Wat veroorzaakt een IOException in Java?

java.io.IOExceptionlijkt het meest voorkomende type uitzondering te zijn, en toevallig lijkt het ook de meest dubbelzinnige.

Ik blijf de throws IOExceptionzien wanneer ik schrijf met sockets, bestanden, enz. Ik heb er echter nooit een op me laten schieten, dus ik vraag me af wat het zou moeten doen de uitzondering ontslaan. De documentatie is niet erg behulpzaam om uit te leggen wat er aan de hand is:

Signaleert dat er een I/O-uitzondering is opgetreden. Deze klasse is de algemene klasse van uitzonderingen die wordt geproduceerd door mislukte of onderbroken I/O-bewerkingen.

Wat zijn enkele gevallen waarin een IOException zou worden gegenereerd en hoe moet deze worden gebruikt?


Antwoord 1, autoriteit 100%

Stel je voor:

  1. Een netwerkbestand aan het lezen en de verbinding is verbroken.
  2. Een lokaal bestand lezen dat niet langer beschikbaar was.
  3. Het gebruik van een stream om gegevens te lezen en een ander proces sloot de stream.
  4. Probeer een bestand te lezen/schrijven, maar heb geen toestemming.
  5. Ik probeerde naar een bestand te schrijven, maar er was geen schijfruimte meer beschikbaar.

Er zijn nog veel meer voorbeelden, maar dit zijn naar mijn ervaring de meest voorkomende.


Antwoord 2, autoriteit 20%

In het algemeen betekent I/O Ingang of Uitgang. Die methoden gooien de IOExceptionwanneer een invoer- of uitvoerbewerking is mislukt of geïnterpreteerd. Houd er rekening mee dat dit niet wordt gegenereerd voor lezen of schrijven naar het geheugenomdat Java het automatisch afhandelt.

Hier zijn enkele gevallen die resulteren in IOException.

  • Lezen uit een gesloten invoerstroom
  • Probeer een bestand op internet te openen zonder een netwerkverbinding

Antwoord 3, autoriteit 14%

Java-documentatie is handig om de hoofdoorzaak van een bepaalde IOException.

Kijk maar eens naar de direct bekende sub-interfacesvan IOExceptionop de documentatiepagina:

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

De meeste van deze uitzonderingen spreken voor zich.

Een paar IOExceptionsmet hoofdoorzaken:

EOFException: signalen dat een het einde van het bestand of het einde van de stream is onverwachts bereikt tijdens invoer. Deze uitzondering wordt voornamelijk gebruikt door data-invoerstromen om het einde van de stream aan te geven.

SocketException: gegooid om aan te geven dat er een fout is opgetreden bij het maken of openen van een socket.

RemoteException: een RemoteException is de algemene superklasse voor een aantal communicatiegerelateerde uitzonderingen die kunnen optreden tijdens het uitvoeren van een externe methodeaanroep. Elke methode van een externe interface, een interface die java.rmi.Remote uitbreidt, moet RemoteException vermelden in zijn throws-clausule.

UnknownHostException: gegooid om aan te geven dat het IP-adres van een host niet kon worden bepaald (je bent mogelijk niet verbonden met internet).

MalformedURLException: gegooid om aan te geven dat er een onjuist opgemaakte URL is opgetreden. Ofwel kon er geen wettelijk protocol gevonden worden in een specificatiestring of de string kon niet geparseerd worden.

Other episodes