FileFinder using Breadth First Search algorithm fails

  • Java
  • Thread starter Sam Groves
  • Start date
  • #1
Sam Groves
11
0
I am developing a app which would be like the File Explorer except the fact that it will have many more features to it.

I am trying to implement a function
Code:
 void calc()
which would try to find a file with a specific relative path.I am using the Breadth First Search algorithm for my blind search.

I have this Java Class:

FileFinder:
import java.io.File;
import java.io.IOException;
import java.util.ArrayDeque;
public class FileFinder
{
  String searchPath;
  String diskLocation;
  String[]locations;
  public FileFinder(String searchPath,String diskLocation)
  {
    this.searchPath = searchPath;//specificy search path
    this.diskLocation = diskLocation;//specify disk location
    locations = new String[33];
  }

  public void calc() throws IOException {
    int x = 0;
    ArrayDeque<String>searchedFiles = new ArrayDeque<>();
    searchedFiles.add(diskLocation);
    while(!searchedFiles.isEmpty())//if queue is empty we have carried out our search
    {
      for(String i:searchedFiles)
      {
        System.out.println(i);
        File f = new File(i);
          try{
            var files = f.listFiles();//if the java file is a directory
            while(files!=null) {
              for (File fl : files) {
                searchedFiles.addLast(fl.getCanonicalPath());//add every Java file of the directory to the queue
              }
            }
          }
          catch(Exception e)
          {
          }
          if(f.isFile())if the Java file is a file
        {
          if(f.getPath()==searchPath)if relative path -> search path
          {
            if(x< locations.length-1)check if there is space in the array to not overwrite strings/be out of bounds
            {
              locations[x] = f.getCanonicalPath();//add canonical path to the array of results
              x++;//increment x
            }
          }
        }
        searchedFiles.remove(i);//remove the visited Java file
      }
    }
printFindings();
  }
public void printFindings()
{
    for(String i:locations)
    {
      System.out.println(i);
    }
}
}

I am inserting my USB Flash Drive which has few directories and files in total(10 or 11?)
But when I call it in main it prints out this message:

Java:
D:\
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.base/java.util.Arrays.copyOf(Arrays.java:3720)
    at java.base/java.util.Arrays.copyOf(Arrays.java:3689)
    at java.base/java.util.ArrayDeque.grow(ArrayDeque.java:150)
    at java.base/java.util.ArrayDeque.addLast(ArrayDeque.java:308)
    at FileFinder.calc(FileFinder.java:54)
    at Main.main(Main.java:11)

The searchPath parameter is HelloWorld.txt , I have created one file at the D:\ directory and one at the D:\as\ directory so I expected the canonical paths of those 2 files to be shown in the output however I get this weird message.

As you see D:\ is printed out correctly but then why it throws a OutOfMemory exception?I suspect there is a endless loop but cant seem to figure out where it is.
 
Technology news on Phys.org
  • #2
My suggestion would be to use a debugger and step through the code as it executes.

Alternatively, you could print the isEmpty flag set as you loop and print out when you add or drop an entry. It should become obvious where you went wrong.

one possible trip up could be searching over a dot or double dot directory Ie
”,” is the current directory and “..” is the parent directory.
 
  • #3
In addition to what @jedishrfu said about using a debugger, you should come up with a better name for the function you're trying to write.
Sam Groves said:
I am trying to implement a function void calc() which would try to find a file with a specific relative path.
Coming up with a better name would help readers (including yourself in a few weeks) understand what the function is supposed to do. Your description of what this function should do might give you an idea for a better name.
 
  • Like
Likes jedishrfu

Similar threads

  • Programming and Computer Science
Replies
8
Views
1K
  • Programming and Computer Science
Replies
3
Views
2K
  • Programming and Computer Science
Replies
4
Views
3K
  • Programming and Computer Science
Replies
1
Views
1K
  • Programming and Computer Science
Replies
5
Views
1K
  • Programming and Computer Science
3
Replies
75
Views
4K
  • Programming and Computer Science
Replies
1
Views
779
  • Programming and Computer Science
Replies
28
Views
3K
  • Programming and Computer Science
Replies
5
Views
2K
  • Programming and Computer Science
Replies
3
Views
2K
Back
Top