190 likes | 276 Views
Recitation File I/O. File I/O. File inFile = new File("data.txt"); File inFile = new File (“/Users/ sunil /test.txt");. JFileChooser. Selecting a File JFileChooser chooser = new JFileChooser (“directory to start from”); Chooser.showOpenDialog (null);
E N D
File I/O • File inFile = new File("data.txt"); • File inFile = new File (“/Users/sunil/test.txt");
JFileChooser • Selecting a File • JFileChooser chooser = new JFileChooser(“directory to start from”); • Chooser.showOpenDialog(null); • File selectedFile = chooser.getSelectedFile(); • File directory = chooser.getCurrentDirectory();
File methods • inFile.exists() – see if inFile is a real file • inFile.isFile() – check to see if inFile is a file or directory • Directory.list() – returns a string[] of files inside the directory
Streams for Low Level File I/O • FileOutputStream and FileInputStream • Writes only bytes to an outfile, or read bytes from an outfile File file = new File(“sample1.data”) FileOutputStreamoutStream = new FileOutputStream(file); outStream.close(); OR FileInputStreaminStream = new FileInputStream(file); inStream.close();
Streams for High-Level File I/O File outFile = new File( "sample2.data" ); FileOutputStreamoutFileStream = new FileOutputStream(outFile); DataOutputStreamoutDataStream = new DataOutputSteam(outFileStream); outDataStream.writeInt(2343); outDataStream.writeLong(34545L); outDataStream.writeFloat(23.34F); outDataStream.writeDouble(456.4234D); outDataStream.writeChar('J'); outDataStream.writeBoolean(true) outDataStream.close(); outFileStream.close();
Streams for High-Level File I/O File inFile = new File( "sample2.data" ); FileInputStreaminFileStream = new FileInputStream(inFile); DataInputStreaminDataStream = new DataInputSteam(inFileStream); inti = inDataStream.readInt(); long l = inDataStream.readLong(); float f = inDataStream.readFloat(); double d = inDataStream.readDouble(); char c = inDataStream.readChar(); booleanbool = inDataStream.readBoolean();inDataStream.close(); inFileStream.close();
Reading Data in Right Order • Order of write and read operations must match in order to read the stored primitive data back correctly
Reading Data in Right Order • Order of write and read operations must match in order to read the stored primitive data back correctly
Types of Files • So far writes/reads have been on binary files • To write to a text file, we use textfile input/output
Text file output File outFile = new File("sample3.data"); FileOutputStreamoutFileStream = new FileOutputStream(outFile); PrintWriteroutStream = new PrintWriter(outFileStream); outStream.println(2343); outStream.println("Hello, world."); outStream.println(true); outStream.close(); outFileStream.close();
Text file output • To append to a file instead of writing over the file, create the outFileStream as follows: FileOutputStreamoutFileStream = new FileOutputStream(outFile, true);
Text file input File inFile = new File("sample3.data"); FileReaderfileReader = new FileReader(inFile); BufferedReaderbufReader = new BufferedReader(fileReader); String str = bufReader.readLine(); inti = Integer.parseInt(str); bufReader.close(); fileReader.close();
Textfile Input with Scanner Scanner scanner = new Scanner(new File("sample3.data")); inti = scanner.nextInt(); scanner.close()
Object File I/O • The Object being written/read must implement serializable class Person implements Serializable { . . . }
Writing Objects File outFile = new File("objects.data"); FileOutputStreamoutFileStream = new FileOutputStream(outFile); ObjectOutputStreamoutObjectStream= new ObjectOutputStream(outFileStream); account1 = new Account(); bank1 = new Bank(); outObjectStream.writeObject( account1 ); outObjectStream.writeObject( bank1 )
Reading Objects File inFile = new File("objects.data"); FileInputStreaminFileStream = new FileInputStream(inFile); ObjectInputStreaminObjectStream= new ObjectInputStream(inFileStream); Account account1 = (Account) inObjectStream.readObject( ); Bank bank1 = (Bank) inObjectStream.readObject( );
Writing and Reading Arrays Person[] people = new Person[ N ]; outObjectStream.writeObject ( people ); Person[ ] people = (Person[]) inObjectStream.readObject( )
When to stop reading • Different reader classes return different signals at the end of file • Binary file readers throw the EOFException at the end of file • Text file readers return null or -1