Add a File object to an array of File objects
Solution 1
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] = ...
Solution 2
You might have forgotten to allocate the array - like this:
java.io.File [] files = new java.io.File[10];
If you only declared it like this:
java.io.File [] files;
files
will be null
and files[fileCount]
will cause a NullPointerException
.
As mentioned in the comments, you might like to change it to:
java.util.List<java.io.File> files = new ArrayList<>();
and add the files like:
files.add(file);
This way you won't have to know the number of entries in advance.
ozzymado
Updated on October 06, 2020Comments
-
ozzymado over 3 years
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;
-
Rudi Kershaw about 10 yearsBeat me to the answer by seconds. +1
-
ozzymado about 10 yearsThat would be the problem...I didn't give it a size because I managed to populate allDocs without providing a size using allDocs.listFiles() but I guess that would be because listFiles() returns an array while I'm trying to include individual objects into an array. Thanks.