1 / 55

Streams and File I/O (That is, Input/Output)

Streams and File I/O (That is, Input/Output). OR How you read data from files and write data to files. Streams. Abstractly, a stream is a flow of data Data could be characters, numbers, bytes consisting of binary digits, bytes consisting of binary encoding of objects, etc.

loren
Download Presentation

Streams and File I/O (That is, Input/Output)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Streams and File I/O (That is, Input/Output) OR How you read data from files and write data to files CS 150: Intro. to Computing

  2. Streams • Abstractly, a stream is a flow of data • Data could be characters, numbers, bytes consisting of binary digits, bytes consisting of binary encoding of objects, etc. • If the data flows “out” of your program (and, say, to a file or the monitor) then the stream is an output stream • If the data flows “in” to your program, then the stream is an input stream CS 150: Intro. to Computing

  3. Streams • In Java, file I/O (and also simple keyboard/monitor I/O) is handled by streams • In Java, a stream is an object that either delivers data to its destination (such as a file or monitor) or takes data from a source (such as a file or keyboard) and delivers it to your program • System.out is an example of an output stream CS 150: Intro. to Computing

  4. Streams File, Monitor, Network, Etc. output stream Program File, Keyboard, Network, Etc. input stream CS 150: Intro. to Computing

  5. Remember: • An input stream moves data into your program (not into a file) • An output stream moves data out of your program (not out of the file) CS 150: Intro. to Computing

  6. Binary vs Text Files • All data in any file is stored as a sequence of bits. But, sometimes we “think” of the file as consisting of a sequence of characters (for example, your Java source code files), and some we think of as simply containing a sequence of binary digits (such as a file containing the machine code for a program) • The files of characters are called text files • The files of bits are called binary files • Java has objects to handle I/O to both kinds of files. We’ll only work with text files CS 150: Intro. to Computing

  7. Text File I/O • Best to just start with an example: we’ll add some file I/O to StudentRecord Must be here! CS 150: Intro. to Computing

  8. Text File I/O (cont.) • We use the println() method in the class PrintWriter (not System.out.println(), but acts the same) Returns a reference to an OutputStream object CS 150: Intro. to Computing

  9. CS 150: Intro. to Computing

  10. CS 150: Intro. to Computing

  11. What’s with these?! CS 150: Intro. to Computing

  12. Another Look… CS 150: Intro. to Computing

  13. What’s With This try…catch Thing?! • This is an example of exception handling in Java (which we may cover more completely at a later date) • For now, know that this says: execute the statements in the try block. If something goes wrong, then stop and execute the statements in the catch block • Lots can go wrong with file I/O (e.g. the file may not exist, or you may not have permission to access it) CS 150: Intro. to Computing

  14. Subtle and Very Important… If written this way, the variable outputStream is local to the try block! CS 150: Intro. to Computing

  15. Still Another Look… Here it’s visible throughout the whole method What’s with this?! CS 150: Intro. to Computing

  16. So, How Do We Use These Things?! • Just like you use System.out.println(), though there are also methods specially designed to print doubles, chars, etc. CS 150: Intro. to Computing

  17. This is a variable name! I could have called it any legal variable name. Writing To a File (cont.) CS 150: Intro. to Computing

  18. Writing To a File (cont.) Why don’t I need to use getName() here? CS 150: Intro. to Computing

  19. Still More Writing To a File CS 150: Intro. to Computing

  20. CS 150: Intro. to Computing

  21. close() the Stream! • Calling the close() method: • Flushes the stream • Operating system releases all resources needed to connect the stream to the file, and performs other housekeeping • If stream isn’t closed, Java closes it when the program ends, but you’re taking a chance… • If program ends abnormally, then Java may not be able to automatically close the stream and you could lose data • You need to close a stream before reading from the same file CS 150: Intro. to Computing

  22. A True Story… CS 150: Intro. to Computing

  23. Why Ever flush() a Stream? • There are situations where you want the stream to remain open (you’re still using it), but you need to be sure data goes to output device • Writing to a network interface • During long operations on a file, flush stream in case there is some kind of abnormality • OS crash, etc. CS 150: Intro. to Computing

  24. Miscellaneous • File names: The file name you give Java is simply a String. It doesn’t know about suffixes and the like. That’s the OS’s thing. • Opening a text file for appending: Indicates open for appending CS 150: Intro. to Computing

  25. Streams and File I/O Part II Reading from Files CS 150: Intro. to Computing

  26. BufferedReader Class • The BufferedReader class is the input stream equivalent of the PrintWriter class • The constructor requires a similar setup • The class methods are analogous • Remember to import java.io.* • Remember this is for reading text files CS 150: Intro. to Computing

  27. CS 150: Intro. to Computing

  28. The FileReader class is a subclass of the Reader class, so using it in the constructor is “legal” CS 150: Intro. to Computing

  29. CS 150: Intro. to Computing

  30. What’s with this override thing? Note the exceptions that can be thrown CS 150: Intro. to Computing

  31. Reading From Files • As with writing to files, you need to know “where” you are in the file when reading • Unlike with writing, you need to know when you have run out of stuff to read in the file • When reading, you generally need to have a place (i.e. a variable) to put the data you have read • Beware: there are many subtleties here CS 150: Intro. to Computing

  32. Anything look strange here? It should! CS 150: Intro. to Computing

  33. CS 150: Intro. to Computing

  34. Example • Some new file-reading code added to the code that created the file profsGrades.txt CS 150: Intro. to Computing

  35. Example (cont.) Adding a simple cast to a char will fix this problem, but there are others (see next slide) CS 150: Intro. to Computing

  36. CS 150: Intro. to Computing

  37. Note the Changes… • The entirety of the input code is in the try block (including closing the stream), not just the memory allocation for the stream • There are two different classes of exceptions that are caught here: FileNotFoundException and IOException • This is how you should write your I/O code! CS 150: Intro. to Computing

  38. Running the Example Code CS 150: Intro. to Computing

  39. Augmenting Our Code • What the read documentation didn’t tell you is that the read() method returns the integer value 1 if there is no more file to read • We’ll use this to modify our code to read (and print to standard output) the entire file CS 150: Intro. to Computing

  40. NOTE! (see next slide) CS 150: Intro. to Computing

  41. Notes From Last Slide • myChar is declared an int, since we’ll need to check an integer value to see if we’re at the end of the file • We use an infinite loop to keep iterating until we’ve read the entire file • We call the read() method within the conditional for the if statement. Regardless of whether the condition is true, the call to read() occurs (this is a standard hack for this kind of code) CS 150: Intro. to Computing

  42. More Notes… • We use the print() method as opposed to the println() method – when a newline character is encountered, this will cause a new line in the output • We perform the cast to char inside the System.out.print () statement CS 150: Intro. to Computing

  43. There Are Easier Ways • Use another version of the read() method to read characters into a char array • Use the readline() method, which reads a whole line at a time into a String CS 150: Intro. to Computing

  44. CS 150: Intro. to Computing

  45. More read() Documentation CS 150: Intro. to Computing

  46. Often the Best Way… CS 150: Intro. to Computing

  47. A problem CS 150: Intro. to Computing

  48. The Problem • The readLine() method returns the value null if it reaches the end of file. When this happens, the variable currentLine is assigned the value null, which causes a NullPointerException when we try to call its equals() method in the if statement. See the fix on either of the next two slides (the first is the recommended fix) CS 150: Intro. to Computing

  49. A fix CS 150: Intro. to Computing

  50. Another fix CS 150: Intro. to Computing

More Related