Add a File object to an array of File objects
arrays, file, java
Solution
You might prefer to simplify:
List<File> fileList = new ArrayList<>();
List<File> dirList = new ArrayList<>();
while (count < allDocs.length){
if (allDocs[count].isDirectory()){
dirList.add(allDocs[count]);
System.out.println("Document " + allDocs[count].getPath()
+ " sorted into -Directory- array at position " + dirCount);
dirCount++;
}
else{
fileList.add[allDocs[count]);
System.out.println("Document " + allDocs[count].getPath()
+ " sorted into -File- array at position " + fileCount);
fileCount++;
}
count++;
}
dirs = dirist.toArray(new File[dirList.size()]);
dirCount = dirs.length;
files = fileList.toArray(new File[fileList.size()]);
fileCount = files.length;
Using a `List<File>` instead of `File[]` seems appropiate, as you do not know the array sizes in advance, and you need:
File[] files = new File[n];
if intending to fill in a File:
files[fileCount] = ...
Problem
First, let me show you the code I have so far: ``` public void populateArray(){ //NOTE: THIS METHOD SHOULD BE RUN FIRST. Many of the methods in this class rely on a populated file array to function. // This method will populate our file array. // First, we note the directory we want to pull files from. File folder = new File("HR"); File dir = new File(""); File file = new File(""); //Then we fill an array with the list of documents in that directory //This will also include folders. int count = 0; allDocs = folder.listFiles(); int fileCount = 0; int dirCount = 0; System.out.println("Displaying contents of directory..."); while (count < allDocs.length){ System.out.println("Found: " + allDocs[count]); count++; } System.out.println("Sorting directories and files separately..."); count = 0; while (count < allDocs.length){ if (allDocs[count].isDirectory()){ dir = new File(allDocs[count].getPath()); dirs[dirCount] = dir; System.out.println("Document " + allDocs[count].getPath() + " sorted into -Directory- array at position " + dirCount); dirCount++; } else{ file = new File(allDocs[count].getPath()); files[fileCount] = file; System.out.println("Document " + allDocs[count].getPath() + " sorted into -File- array at position " + fileCount); fileCount++; } count++; } return; } ``` files, dirs, and allDocs are arrays declared within the class outside of any methods. allDocs is the array I use to get every directory and file in the directory of interest, HR. I do this with allDocs = folder.listFiles(); I want files to be the array to store all of the files in the directory HR, and I want dirs to be the array to store all of the directories in HR, but I don't want to store any of the contents of the directors in HR. I try to do this with the loop under the println "Sorting directories and files separately." The problem is here: ``` else{ file = new File(allDocs[count].getPath()); files[fileCount] = file; System.out.println("Document " + allDocs[count].getPath() + " sorted into -File- array at position " + fileCount); fileCount++; } ``` It's here because the first element in allDocs is a file. The problem also occurs when the first element is a directory. The problem is a null pointer exception on the files[fileCount] = file; line, which I don't understand. "file" is not null, I just assigned it a value. Of course files[fileCount] is null in this case, but why does that matter if I'm assigning it a value? Files declaration: ``` public class Methods { private static File[] files; ```