FileFinder using Breadth First Search algorithm fails

  • Java
  • Thread starter Sam Groves
  • Start date
In summary, the FileFinder application encounters limitations when employing the Breadth First Search (BFS) algorithm, leading to inefficiencies in locating files within large and complex directory structures. The BFS approach may struggle with deep hierarchies and vast numbers of files, resulting in suboptimal performance and increased processing time compared to alternative search strategies.
  • #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

FAQ: FileFinder using Breadth First Search algorithm fails

Why does FileFinder using Breadth First Search algorithm fail?

FileFinder using Breadth First Search algorithm may fail due to various reasons such as incorrect implementation of the algorithm, issues with data structures used, or errors in the logic of the code.

How can I troubleshoot FileFinder using Breadth First Search algorithm failure?

To troubleshoot the failure of FileFinder using Breadth First Search algorithm, you can start by checking the implementation of the algorithm, verifying the data structures used, and debugging the code to identify any errors in the logic.

Are there common pitfalls to avoid when implementing FileFinder using Breadth First Search algorithm?

Common pitfalls to avoid when implementing FileFinder using Breadth First Search algorithm include incorrect handling of data structures, improper initialization of variables, and overlooking edge cases in the code.

How can I optimize FileFinder using Breadth First Search algorithm to prevent failure?

You can optimize FileFinder using Breadth First Search algorithm by ensuring efficient data structures are used, implementing proper error handling mechanisms, and thoroughly testing the code to catch any potential issues before deployment.

Is there a recommended approach to debug FileFinder using Breadth First Search algorithm failure?

A recommended approach to debug FileFinder using Breadth First Search algorithm failure is to use debugging tools provided by the programming language, carefully analyze the code step by step, and systematically identify and fix any errors in the implementation.

Similar threads

Replies
1
Views
1K
Replies
4
Views
3K
Replies
5
Views
2K
Replies
4
Views
3K
Replies
3
Views
2K
Replies
11
Views
5K
Back
Top