110 likes | 248 Vues
In this guide, we'll explore file input and output (I/O) in Java using the `File`, `Scanner`, and `PrintStream` classes. Traditionally, programs interact with the console, but utilizing files allows for less user interaction and better data management. We will cover checking if a file exists, renaming, and deleting files, as well as handling checked exceptions with the `throws` clause. You'll also learn how to read files line by line and process their contents effectively. Two hands-on exercises will enhance your understanding.
E N D
Mr. Wortzman AP Computer Science
File I/O • So far, we have gotten all our input and written all our output to the console • In reality, this is somewhat uncommon • Instead, we often use files for input and output • This has the advantage of requiring much less user interaction
The File class • Most of this is done in Java through the File class • File f = new File("myFile.txt"); • This class has some useful methods: • exists() - returns true if the named file exists • getName() - returns the file's name • renameTo() - changes the name of the file • delete() - delete's the file from the disk • See the Java API for more
File I/O • None of these methods can work with the contents of the file however • For that, we need to use either a Scanner (for input) or a PrintStream (for output) Scanner input = new Scanner(new File("input.txt")); PrintStream output = new PrintStream(new File("output.txt"));
Checked Exceptions • What happens when you try to compile with the code on the previous slide? • Certain types of errors must be dealt with somehow in the program • These are considered dangerous, so Java wants to make sure you know they might occur • Many types of file errors are considered checked exceptions
The throws clause • The easiest way to "deal with" these errors is to use a throws clause public static void readInput() throws FileNotFoundException{ ...} • This tells Java "I know something bad might happen, and I accept the consequences if so" • Any method that calls a method that throws must also throw
File I/O • Once we've hooked up the file, we can use Scanner and PrintStream as usual Scanner input = new Scanner(new File("input.txt")); while (input.hasNext()) { System.out.print(input.next() + " "); } String[] words = {"cat", "dog", "bird", "hedgehog"}; PrintStream output = new PrintStream("output.txt"); for (inti = 0; i < words.length; i++) { output.println(words[i]); }
File I/O Notes • Important notes: • Opening an existing file for output will overwrite the file • You can use the exists() method of File to check for this • Never open the same file for input and output at the same time-- everything will get erased • You can walk off the end of an input file if you're not careful-- use the has methods to look before you leap
Combining Lines and Tokens • Files are typically written such that each line is a separate entity • Therefore, we usually read files one line at a time while(file.hasNextLine()) { ... } • But each line might contain multiple tokens/values
Combining Lines and Tokens • Remember that we can make a Scanner from a String, so we can do something like: Scanner file = new Scanner(new File("myFile.txt"));while (file.hasNextLine()) { Scanner tokens = new Scanner(file.nextLine()); while (tokens.hasNext()) { ... } }
File I/O • Exercise 1: Write a Java program to prompt the user for an input and output file, and copy the contents of the input file to the output file. • Exercise 2: Write a Java program to read a file (specified by the user) containing a list of names and scores, and print out each person's total. • Wortzman 5 7 12 8 • Hawker 3 8 19 • K 10 4 7 • Should print • Wortzman 32 • Hawker 30 • K 21