130 likes | 228 Views
CSE 1341 - Honors Principles of Computer Science I. Spring 2008 Mark Fontenot mfonten@engr.smu.edu. Note Set 19. Note Set 19 Overview. File and Streams. Currently. Data in an executing program Stored in RAM while program is in execution When program ends, data is no longer accessible
E N D
CSE 1341 - HonorsPrinciples of Computer Science I Spring 2008 Mark Fontenot mfonten@engr.smu.edu Note Set 19
Note Set 19 Overview • File and Streams
Currently • Data in an executing program • Stored in RAM while program is in execution • When program ends, data is no longer accessible • RAM is volatile storage – must have powered to maintain state (retain data)
Persistent Storage • Non-volatile memory – doesn’t need power to maintain state • Data can survive a power cycle • Examples • hard-drive • CDs • USB drive (flash memory)
File processing • Part of nearly all languages • Stream – ordered data read or written • abstraction in Java • Two types of file processing in Java for us • Text-based file i/o • Binary File I/O - Object serialization (storing objects directly to file) • Object serialization/deserialzation
Data Hierarchy • Lowest level – 1s & 0s - The bit • “easy” to create computer hardware that only had to maintain two states • 2 bits – 4 combinations • 00, 01, 10, 11 • 3 bits – 8 combination • 000, 001, 010, 011, 100, 101, 110, 111 • 4 bits – 16 combinations • n bits – 2n combinations • 8 bits –> 1 byte • Java uses 2 bytes to represent a character (16 bytes) – Unicode character set • Unicode contains characters from many of the worlds languages
Data Hierarchy • Can group characters to make fields • i.e. string of characters to make name • Group of fields makes a record • record is implemented as a class in java • think about just the data stored in the data members of one instance of an object • Name, Id, Address, etc… • Group of records can be stored in a file • Employee file • Customer file • Inventory file
Java and Files • Each file – sequential stream of bytes • How that stream/sequence is interpreted is up to the programmer who reads/writes the file • How do we know when we’re done reading? • OS provides some mechanism to know that the complete contents of the file have been read (sentinel value) • programmer knows exactly how many “things” to read from the file • 2 Typles of File I/O • Character File I/O • Writing text to files • Binary File I/O • Writing byte data or complete objects
Sample class public class Account { private String acctNum; private String fName; private double balance; public Account (String num, String name, double bal) { acctNum = num; fName = name; balance = bal; } //Assume Accessors and Mutators for each data member }
Sample Output import java.util.*; import java.io.*; public class FileOutput { public static void main (String [] args) { //Create an arraylist to store customers ArrayList<Account> customers = new ArrayList<Account> (); //create some sample customers and add to list Account a = new Account ("123", "Sam", 123.34); customers.add(a); a = new Account("234", "Sue", 223.33); customers.add(a); a = new Account("144", "Mark", 322.22); customers.add(a);
Sample Output //open a file Formatter output = null; //must open the file in a try catch block try { output = new Formatter("data.txt"); } catch (IOException e) { System.out.println("There is an error - exiting"); System.exit(1); } //write everything from list to output for (Account x: customers) output.format("%s %s %.2f\n", x.getAcctNum(), x.getFName(), x.getBalance()); output.close(); } } This is text-based or character-based file I/O.
Sample Read import java.util.*; import java.io.*; public class FileInput { public static void main (String [] args) { //List to put the objects we're going to read from the file ArrayList <Account> list = new ArrayList<Account> (); //We'll use a scanner object to read from the file. //Are there other ways? Of course... Scanner s = null; try { s = new Scanner (new File ("data.txt")); } catch (IOException e) { System.out.println("Error opening file"); System.exit(1); }
Sample Read //Temp variables to store values read from file String aNum, fName; double bal; while (s.hasNext()) { aNum = s.next(); fName = s.next(); bal = s.nextDouble(); Account a = new Account(aNum, fName, bal); list.add(a); } //print the customers out for(Account x: list) System.out.println(x); } } could be replaced with: Account a = new Account (s.next(), s.next(), s.nextDouble());