The ArrayList Class and File IO
Download
Report
Transcript The ArrayList Class and File IO
The ArrayList Class and File IO
CS0007: Introduction to Computer Programming
The ArrayList Class
Array data structure:
Pro: Can access any element with its index
Con: Cannot add or remove elements (statically sized)
Linked list data structure
A linked list is a data structure in which an element of the list is a node that
references the next element in the list.
A node in a linked list is made up of some data and a reference to another node.
Pro: Can add and remove elements (dynamically sized)
Con: Have to traverse list from beginning to find an element
Arrays are weak where linked lists are strong, and vice versa. Is there
any data structure to take advantage of this.
Answer: Yes
The Java API provides a class called ArrayList.
An ArrayList is a data structure that is a combination of an array and a linked
list.
The ArrayList Class
ArrayLists contain elements that can be accessed by their index,
but also have advantages over arrays:
An ArrayList automatically expands as items are added to it.
An ArrayList automatically shrinks as items are removed from it.
To use an ArrayList, you must import it from the java.util
package:
import java.util.ArrayList;
The declaration and creation of an ArrayList follows this form:
ArrayList<dataType> identifier = new ArrayList<dataType>();
So If I wanted to create an array list whose elements are of type
String:
ArrayList<String> myList = new ArrayList<String>();
Important Note: An ArrayList can only hold elements that are
objects.
That means an ArrayList cannot hold elements of a primitive type.
The ArrayList Class
You can add items to the end of an ArrayList by using the add
method
myList.add("Eric");
myList.add("Bob");
myList.add("Steve");
This will make "Eric" the first element, "Bob" the second element,
and "Steve" the third element.
Like in an array, these elements have indices starting at 0.
To get the number of items stored in the ArrayList, use the size
method.
myList.size();
To get an element by its index, use the get method
myList.get(1);
Example: ArrayListExample.java
Enhanced for Loop and ArrayLists
As stated previously, the enhanced for loop iterates through
the elements of any collection.
We’ve seen this with arrays before:
String[] names = {"Eric", "Thomas", "Steve"};
for(String name : names) {
System.out.println(name);
}
We can also do this with ArrayLists.
Example: EnhancedForArrayList.java
The toString Method and
ArrayLists
Every class in Java inherits methods from a base class called
Object.
If you were to create a class, it would automatically inherit these
methods.
These methods are placeholders and do nothing meaningful when you inherit
them.
The point of these methods is to override them.
When you override an inherited method, you replace a previous
implementation of that method with another.
One of these methods is called toString.
toString is a method whose purpose is to return a String
representation of an object.
ArrayList has its own implementation of this.
Example: ArrayListToString.java
Inserting, Removing and Replacing
Elements
To remove an element from a list you use the remove method with the index of the
element you want to remove:
myList.remove(1);
Note: This will remove the second element and all elements behind that element will
move up in the list.
For example: If an element has index 5 before we remove the element at index 1, after the removal, it
will have index 4.
To insert an element into a specific index you use the add method (similar to adding an
element to the end of the list):
myList.add(3, "Chris");
This will add "Chris" to the list at index 3 and all elements with indices greater than 2
will move back one.
For example: If an element has index 5 before we add the element at index 3, after the addition, it will
have index 6.
Finally, you can replace an element by using the set method:
myList.set(2, "Joe");
This will replace the value of the element at index 2 with the value "Joe".
Example: ArrayListInsertRemoveReplace.java
Java File Input and Output
So far we have written programs, data could not be saved in between runs of
the program.
This is because the data we’ve used in our programs have been stored in RAM.
Once our program is done running the data stored in RAM disappears.
In order for us to save data for use outside our programs or for different runs of
our programs, we must save our data outside of RAM.
The most simple way of doing this is writing to a text file on the computer’s hard drive.
In a text file all data is encoded as text, such as Unicode.
That way, when our program is finished executing, we will still have a file with our data.
The steps taken when reading or writing to a file:
Open the file.
This opens a connection between the file and a program (often called a stream)
Data is written or read from a file.
When the program is finished with the file, the file must be closed.
Two kinds of files in input and output:
Input File – File in which data is read from.
Output File – File in which data is written to.
Writing to a File
The Java API provides a class for writing to a file called
PrintWriter.
You must import the PrintWriter class.
import java.io.PrintWriter;
The general form to create a PrintWriter object:
PrintWriter identifier = new PrintWriter(fileName);
What is fileName?
It is the file you want to write to.
Text files typically have a .txt suffix
The file will be created in the directory in which the program was compiled
o Note: This may be different places depending on the IDE you use.
If the file already exists, it will be erased and overwritten!
So to create a FileWriter object that opens a file called
“myFile.txt”:
PrintWriter outputFile = new PrintWriter("myFile.txt");
Writing to a File
Important Note: Creating a PrintWriter object throws an
exception that must be handled.
We will not discuss exception handling in this course at length, so just
perform the following steps to allow your program to compile:
Add the words “throws FileNotFoundException” to the end of the main method’s
header:
public static void main(String[] args) throws FileNotFoundException
Import java.io.FileNotFoundException
import java.io.FileNotFoundException;
There are two methods that can be used to write to a file:
println – prints its argument to the file and ends with a new line
character.
print – prints its argument to the file
When you are finished writing to the file, you must close it using the
close method of the PrintWriter object.
Example: FileOutput.java
Reading from a File
To read from a file we need to use both the Scanner class and another class in the Java API called
File.
The File class is Java’s way of representing a file in code.
For this we need to import both Scanner and File classes:
import java.io.File;
import java.util.Scanner;
Also we have to perform the steps to handle the FileNotFound exception, like when we
wrote to a file.
Next, we need to create both a File and Scanner objects:
File theFile = new File("myFile.txt");
Scanner inputFile = new Scanner(theFile);
This creates a File object that is associated with the file “myFile.txt”.
For now make sure this file is in the same directory that you compile your program from.
Again, this could be different depending on which IDE you use.
If the file does not exist, it will cause an error!
To read a single line from a file we can use the nextLine method on the Scanner object.
Finally, to close the file we use the close method on the Scanner object.
Example: FileInput.java
Detecting the End of a File
It is often the case we want to read all of the contents of the
file, or simply keep reading from the file until the end.
There is a method in the Scanner class that detects if there is
anything left to read in a file called hasNext.
hasNext returns true if there is more to read in a file, or false if
there is not.
So this can be used in a loop to read all of the lines in a file…
o Example: HasNext.java