views:

85

answers:

3

I have been working on this program for quite sometime and my brain is fried. I could use some help from someone looking in.

I'm trying to make a program that reads a text file line by line and each line is made into an ArrayList so I can access each token. What am I doing wrong?

import java.util.*;
import java.util.ArrayList;
import java.io.*;
import java.rmi.server.UID;
import java.util.concurrent.atomic.AtomicInteger;

public class PCB {
    public void read (String [] args) {
        BufferedReader inputStream = null;

        try {
            inputStream = new BufferedReader(new FileReader("processes1.txt"));

            String l;
            while ((l = inputStream.readLine()) != null) {
                write(l);
            }
        }
        finally {
            if (inputStream != null) {
                inputStream.close();
            }
        }
    }

    public void write(String table) {
        char status;
        String name;
        int priority;

        ArrayList<String> tokens = new ArrayList<String>();

        Scanner tokenize = new Scanner(table);
        while (tokenize.hasNext()) {
            tokens.add(tokenize.next());
        }

        status = 'n';
        name = tokens.get(0);
        String priString = tokens.get(1);
        priority = Integer.parseInt(priString);

        AtomicInteger count = new AtomicInteger(0);
        count.incrementAndGet();
        int pid = count.get();

        System.out.println("PID: " + pid);
    }
}

I am about to poke out my eyeballs. I got 3 errors:

U:\Senior Year\CS451- Operating Systems\Project1 PCB\PCB.java:24: unreported exception java.io.IOException; must be caught or declared to be thrown
            inputStream.close();}
                             ^
U:\Senior Year\CS451- Operating Systems\Project1 PCB\PCB.java:15: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
        inputStream = new BufferedReader(new FileReader("processes1.txt"));
                                         ^
U:\Senior Year\CS451- Operating Systems\Project1 PCB\PCB.java:18: unreported exception java.io.IOException; must be caught or declared to be thrown
        while ((l = inputStream.readLine()) != null) {
                                        ^

What am I doing wrong? Any help is very much appreciated.

+4  A: 

When you work with IO in java most of the time you have to handle IOException which can occur anytime when you read/write or even close the stream.

You have to put your sensitive block in a try//catch block and handle the exception here.

For example :

try{
    //All your IO Operations
}catch(IOException ioe){
    //Handle exception here, most of the time you will just log it.
}

Resources :

Colin Hebert
how do i do that though?
Luron
Read the tutorial for the examples.
camickr
+2  A: 

Java checks exception specifications at compile time. You must either catch the exception or declare it thrown in your method signature. Here's how you would declare that it may be thrown from your method:

   public void read (String [] args) throws java.io.IOException {

Catch the exception if your method needs to do something in response. Declare it as thrown if your caller needs to know about the failure.

These are not mutually exclusive. Sometimes it is useful to catch the exception, do something and re-throw the exception or a new exception that wraps the original (the "cause").

RuntimeException and its subclasses do not need to be declared.

Andy Thomas-Cramer
A: 

Good IDEs will either create the catch block for you or add the exception to the method declaration.

Be advised that if you add the exceptions to the method declaration as per Colin's solution, any method that invokes your method will also have to have a suitable catch block or declare the exception in the method declaration.

Tony Ennis