- #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
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:
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:
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.
I am trying to implement a function
Code:
void calc()
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.