The ArrayList Class and File IO

advertisement
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
Download