Transcript NoteSet15x
CSE 1341 - Honors
Principles of Computer Science I
Mark Fontenot
[email protected]
Note Set 15
Note Set 19 Overview
Intro to ArrayLists
File and Streams
ArrayList
One of Java’s Container Classes
Containers hold other things
Can hold unlimited number of object references of any type
(all need to be the same type – but remember about
inheritance)
ArrayList <String> list = new ArrayList<String>();
list.add(“Southern”);
list.add(“Methodist”);
list.add(“University”);
No need to worry about running out of places (unless you
run out of memory)
Arraylist Useful Methods
size() – returns the size of the arraylist
get (int i) – returns the reference stored at the
specified position i
remove( int i)– removes the object references stored
at position i and moves the ones after forward
ArrayList<String> v = new ArrayList<String>();
v.add(“one”);
v.add(“two”);
v.add(“three”);
for(int i = 0; i < v.size(); i++)
System.out.println(v.get());
Arraylists
Can only hold object references
Can’t do
ArrayList<int> v = new ArrayList<int> ();
ArrayList<Integer> l = new ArrayList<Integer>();
l.add(1);
-adding ints, not Integers
l.add(2);
-They are automatically converted to Integer
l.add(3);
ojbects
for (Integer x: l){
System.out.println(x * 2);
}
Automatically converted from
Integers to ints
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 Types 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());