130 likes | 256 Views
CSE 1341 Principles of Computer Science I. Spring 2008 Mark Fontenot mfonten@engr.smu.edu. Note Set 11. Note Set 11 Overview. Basics of Files and File handling Character based file i/o. Currently. Data in an executing program Stored in RAM while program is in execution
E N D
CSE 1341 Principles of Computer Science I Spring 2008 Mark Fontenot mfonten@engr.smu.edu Note Set 11
Note Set 11 Overview Basics of Files and File handling Character based file i/o
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());