Application Programming Hend Alkittawi File I/O Working with File Input and Output WORKING WITH DATA - Data can be stored on a computer in a file with a particular name! - There are two fundamentally different ways to store data in a file: - Text files store data in text format: data items are represented in human readable form, and can be edited using simple text editors. - - *.txt, *.java, *.html, *.csv Binary files store data in binary format: data items are represented in bytes, and stored using an internal format that requires special software to process. - *.jpeg, *.pdf READERS, WRITERS, AND STREAMS - Java APIs provide two set of classes for handling input and output. - If data is stored in text form (as a sequence of characters), the Reader and Writer classes and their subclasses are used to produce input and output. - If data is stored in binary form (as a sequence of bytes), the InputStream and OutputStream classes and their subclasses are used to produce input and output. READERS, WRITERS, AND STREAMS Reader Writer InputStream OutputStream InputStreamReader PrintWriter FileInputStream FileOutputStream FileReader OutputStreamWriter ObjectInputStream ObjectOutputStream FileWriter PrintStream READERS, WRITERS, AND STREAMS - To read text data from a disk file, create a FileReader object - To read binary data from a disk file create a FileInputStream object - To write text data to a disk file, create a FileWriter object - To write binary data to a disk file create a FileOutputStream object THE Scanner CLASS - The Scanner class is flexible in that Scanner objects can be attached to many different kinds of input. - - input from the console - input from a file Reader When constructing a Scanner from a file object, the Scanner automatically constructs a FileReader. - The Scanner class is part of the java.util package. - If the program is unable to locate the specified input InputStreamReader file, it will generate an exception which will prevent the the program from continuing normal execution. - You can throw the exception or handle it with a try/catch. FileReader THE Scanner CLASS - Some of the useful methods for reading input in the Scanner class: - - token-based processing - hasNext(): checks if the input has a token to read - next(): reads and returns the next token as a String - nextInt(): reads and returns an int value - nextDouble(): reads and returns a double value line-based processing - hasNextLine(): checks if the input has a line to read - nextLine(): reads and returns the next line of input as a String FILES AND File OBJECTS - To access a file from inside a Java program, you need to construct an internal object that will represent the file. - Once you have constructed the object, you can call a number of methods to manipulate the file. File myFile = new File ("myFile.txt"); if (file.exists() && file.canRead()) { // read the file! } - The File class is part of java.io package. READING A FILE WITH THE Scanner CLASS - Instead of instantiating objects with fixed values coded into the application, we can instantiate objects by reading data from a file. - create a data directory in your Eclipse project, and place the file in it. Then, add code to read the data from a file public void loadData(String fileName) throws FileNotFoundException { File file = new File( "data/" + filename ); Scanner scan = new Scanner( file ); while( scan.hasNextLine() ) { String line = scan.nextLine(); String[] tokens = line.split(","); // do sth with the string and/or tokens, we will create an object based on the tokens! MyClass obj = new MyClass(tokens[0], Double.parseDouble(tokens[1]), ...); } scan.close(); } To create a data directory in your Eclipse project right-click on project > New > Folder Create a new file in the data directory, or copy and paste an existing file right-click on data folder > New > File then enter data OR copy an existing file > right-click on data folder > paste THE FileWriter CLASS - The FileWriter class can be utilized to write text data to a file. - Writer Use the write() method to write a String to the output file. - If the program is unable to locate the specified input file, it will generate an exception which will prevent PrintWriter the the program from continuing normal execution. You can throw the exception or handle it with a try/catch. public void writeFile(String filename) throws IOException{ File outFile = new File("data/" + filename); OutputStreamWriter FileWriter out = new FileWriter(outFile); out.write("Success! \n"); out.write("Keep it up ..."); out.close(); } FileWriter CODE DEMO - Modify the classes created in previous sessions to demo file I/O concepts. DO YOU HAVE ANY QUESTIONS? THANK YOU! @ hend.alkittawi@utsa.edu By Appointment Online