I am writing a Java program that can take user entries and save them into an ArrayList, then use the ArrayList to open a series of webpages. The program should also be able to read in web addresses from a file. This is where I'm having issues.
I'm currently gettting: The file bills.txt was not found. //the file is in my src folder
Exception in thread "main" java.lang.NullPointerException
at PayBills.main(PayBills.java:92) //this is when the BufferdReader is closed
This isn't homework but the program shares concepts with a homework I am about to do, so I don't want to change anything fundamental about how I'm reading in the text. Any advice is appreciated!
import java.io.*;
import java.util.ArrayList;
public class PayBills implements Serializable
{
/*The purpose of this program is to assist the user in opening a series of webpages to
* pay bills online. The user will be able to save and edit a list of webpages,
* open the newly created list, or read a list from file.
*/
public static void main(String[] args) throws IOException
{
char input1;
String line = new String();
ArrayList<String> list1 = new ArrayList<String>();
Runtime rt = Runtime.getRuntime();
String filename = new String();
try
{
// print out the menu
rt.exec( "rundll32 url.dll,FileProtocolHandler " + "http://www.google.com");
printMenu();
// create a BufferedReader object to read input from a keyboard
InputStreamReader isr = new InputStreamReader (System.in);
BufferedReader stdin = new BufferedReader (isr);
do
{
System.out.println("\nWhat action would you like to perform?");
line = stdin.readLine().trim(); //read a line
input1 = line.charAt(0);
input1 = Character.toUpperCase(input1);
if (line.length() == 1) //check if a user entered only one character
{
switch (input1)
{
case 'A': //Add address process to array
System.out.println("\nPlease enter a web address to add to list:\n");
String str1 = stdin.readLine().trim();
if(str1.startsWith("http://www.") || str1.startsWith("https://www."))
list1.add(str1);
else
{
System.out.println("Please enter a valid web address (starting with http:// or https://).");
}
break;
case 'D': //Show current list
System.out.println(list1.toString());
break;
case 'E': //Execute current list
//rt.exec( "rundll32 url.dll,FileProtocolHandler " + "http://www.speedtest.net");
for(int i = 0; i < list1.size(); i++)
{
Process p1 = Runtime.getRuntime().exec("cmd /c start " + list1.get(i));
}
break;
case 'R': //Read list from file
System.out.println("\nPlease enter the filename to read: ");
{
filename = stdin.readLine().trim();
}
FileReader fr = null;
BufferedReader inFile = null;
try
{
fr = new FileReader(filename);
inFile = new BufferedReader(fr);
line = inFile.readLine();
System.out.println("Test2");
while(line != null)
{
System.out.println("Test3");
if(line.startsWith("http://www.") == false || line.startsWith("https://www.") == false)
System.out.println("Error: File not in proper format.");
else
list1.add(line);
}
System.out.println(filename + " was read.");
}
catch(FileNotFoundException exception)
{
System.out.println("The file " + filename + " was not found.");
break;
}
catch(IOException exception)
{
System.out.println("Error. " + exception);
}
finally
{
inFile.close();
}
break;
case '?': //Display Menu
printMenu();
break;
case 'Q': //Quit
System.out.println("Goodbye!");
System.exit(0);
}//end switch
}//end if
else
System.out.print("Unknown action\n");
}//end do
while (input1 != 'Q' || line.length() != 1);
}
catch(IOException e1)
{
System.out.println("Error: " + e1);
}
}//end main
public static void printMenu()
{
System.out.print("Choice\t\tAction\n" +
"------\t\t------\n" +
"A\t\tAdd Web Address to List\n" +
"D\t\tDisplay Current List\n" +
"E\t\tExecute Current List\n" +
"R\t\tRead List from File\n" +
"?\t\tDisplay Menu\n" +
"Q\t\tQuit\n");
}//end of printMenu()
}//end PayBills
Edit: Ok, the program is no longer crashing because I fixed the NPE, but I am still getting "The file bills.txt was not found.", which is the caught exception. As stated above, the file is located in my src folder so the path should be correct.