Chloe13
Chloe13

Reputation: 29

Do-while loop not paying attention to the while in java

I'm trying to write a do while loop that will read a file that the user input and read it out and will loop until the user types end. The do part is working, but my while just isn't being activated and I'm struggling to figure out why.

public static void readingFiles() throws Exception {
    BufferedReader reader = null;
    Scanner input = null;
    boolean fileFound = true;
    do {
        System.out.print("Enter a file name or Type END to exit: ");

        input = new Scanner(System.in);

        if(input.hasNextLine())
                {
                    try {
                        File f = new File(input.nextLine());
                        reader = new BufferedReader(new FileReader(f));
                        String str = null;

                        while((str = reader.readLine()) != null)
                        {
                            System.out.println(str);
                        }

                    } 
                    catch (FileNotFoundException e) 
                    {
                        System.out.println("File Not Found. Please try again.");
                        fileFound = false;
                        continue;
                    } 
                    catch (IOException e) 
                    {
                        System.out.println("There was an IOException. Please try again.");
                        continue;
                    } 
                    catch (Exception e) 
                    {
                        System.out.println("There was an exception. Please try again.");
                        continue;
                    } 
                    finally
                    {
                        {
                        if(fileFound)
                            reader.close();
                        }
            }
        }
     } while(!input.nextLine().equalsIgnoreCase("end"));
}

I've tried using an if statement before my input.hasNextLine() but then it would ignore the rest of the whole program and do nothing and only typing end would work. I've tried using && in my current if statement too but that didn't work. And I tried using a boolean that I set to true if string contained end. I think the problem may be in the input.hasNextLine but I'm not sure why or what to change it to?

Thanks for any help

Upvotes: 0

Views: 70

Answers (1)

OneCricketeer
OneCricketeer

Reputation: 191681

Calling input.nextLine() again will not preserve your previous input string.

Store it in a variable, and compare that

public static void readingFiles() throws Exception {
    BufferedReader reader = null;
    String filename = null;
    Scanner input = new Scanner(System.in);
    boolean fileFound = true;
    do {
        System.out.print("Enter a file name or Type END to exit: ");
         if(input.hasNextLine()) {
             filename = input.nextLine();
                try {
                    File f = new File(filename);
                    // reader =
           ... 
    } while (!filename.equalsIgnoreCase("end");

Upvotes: 1

Related Questions