내 프로그램을 실행하려고 할 때 null 포인터 예외 문제가 발생했습니다.내 프로그램이 NullPointerException을 throw하는 것을 막는 방법을 알아내는 데 도움이 필요합니다.
지금 제가하고있는이 프로그램은 아직 작업하고있는 프로그램의 또 다른 확장입니다.
이 부분에서는 FileFilter를 추가 했으므로 대부분 구현이 동일해야합니다.
import java.io.*;
import java.util.*;
public class DirectorySize extends DirectoryProcessor
{
/*
Dan Czarnecki
October 29, 2013
Class variables:
private HashMap<File, DirectoryStatistics> directory
A HashMap object that will contain the files and folders
within a directory
Constructors:
public DirectorySize(File startingDirectory) throws FileNotFoundException
Creates a DirectorySize object, takes in a pathname (inherited from DirectoryProcessor class,
and has a single hashmap of a DirectoryStatistics object to hold the files and folders
within a directory
Methods:
public void processFile(File file)
A method that searches for all the files and folders
within a directory and calculated the total size
for each of them
public void run()
Calls the processFile() method and prints out
the files and folders (along with their sizes)
in the directory
public String toString()
Returns each element in the directory Vector
Modification History
October 29, 2013
Original version of class
Implemented run() and processFile() methods
October 30, 2013
Added implementation of FileFilter to processFile() method
*/
private HashMap<File, DirectoryStatistics> directory;
public DirectorySize(File startingDirectory, FileFilter fileFilter) throws FileNotFoundException
{
super(startingDirectory, fileFilter);
directory = new HashMap <File, DirectoryStatistics>();
}
public void processFile(File file, FileFilter fileFilter) throws FileNotFoundException
{
DirectoryStatistics parent;
int index;
File parentFile;
boolean find;
boolean filter;
if(fileFilter == null)
{
System.out.println("null" + fileFilter);
}
if(file == null)
{
System.out.println("null");
}
parentFile = file.getParentFile();
parent = new DirectoryStatistics(parentFile, fileFilter);
find = directory.containsValue(parent);
filter = fileFilter.accept(file);
if(find)
{
directory.put(parentFile, parent);
if(filter)
{
directory.get(parentFile).setSizeInBytes(file.length());
directory.get(parentFile).incrementFileCount();
}
}
if(find)
{
if(filter)
{
directory.get(find).addToSizeInBytes(file.length()); //increments the total size of the directory
directory.get(find).incrementFileCount(); //increments the number of files in the directory
}
}
}
public void run() throws FileNotFoundException
{
File file;
file = directoryLister.next();
while(file != null) //the following will be called when the File object is not null
{
processFile(file, fileFilter);
file = directoryLister.next();
}
}
public String toString()
{
Set<File> parentFile = directory.keySet();
File[] parentFileArray = parentFile.toArray(new File[0]);
String str; //creates a new string that will hold the file or directory name
str = "";
for(int i = 0; i < parentFileArray.length; i++)
{
str = str + directory.get(parentFileArray[i]).toString();
}
return str;
}
}
import java.io.*;
import java.util.*;
public class FileNamesEndingWithFileFilter implements FileFilter
{
/*
Dan Czarnecki
October 30, 2013
Class variables:
private String ending
Tells the program to search for programs with
certain extensions
private boolean isCaseSensitive
Tells the program if the file extension is
case sensitive or not
Methods
public void FileNamesEndingWithFileFilter(String ending, boolean isCaseSensitive)
public boolean accept(File file)
*/
private String ending;
private boolean isCaseSensitive;
public FileNamesEndingWithFileFilter(String ending, boolean isCaseSensitive)
{
if(ending == null)
{
throw new IllegalArgumentException("null input");
}
ending = ending;
isCaseSensitive = isCaseSensitive;
}
public boolean accept(File file)
{
String name;
name = file.getName();
if(isCaseSensitive)
{
return name.endsWith(ending);
}
else
{
name = name.toLowerCase();
ending.toLowerCase();
return name.endsWith(ending);
}
}
}
import java.io.*;
public class TestDirectoryListerPart7
{
/*
Dan Czarnecki
October 29, 2013
Class variables:
N/A
Constructors:
N/A
Methods:
public static void main(String[] args) throws FileNotFoundException
Performs the functions of the Directory Processing program,
implementing the functions of the DirectoryProcessor,
DirectorySize, and DirectoryStatistics classes
Modification history:
October 29, 2013
Created class in which program will run in
*/
public static void main(String[] args) throws FileNotFoundException
{
DirectoryProcessor directoryProcessor;
File startingDirectory;
FileFilter fileFilter;
startingDirectory = new File("U:/MyWeb/Coursework/");
fileFilter = new FileNamesEndingWithFileFilter("class", true);
directoryProcessor = new DirectorySize(startingDirectory, fileFilter);
System.out.println("Determining total number of bytes in each directory: " + startingDirectory);
directoryProcessor.run();
System.out.println(directoryProcessor);
}
}
이 프로그램의 FileFilter를 모두 값을 실행하고 내에는 processFile() 메서드 내 파일 널 포인터 예외를 반환됩니다
여기 내 코드입니다.
Exception in thread "main" java.lang.NullPointerException
at DirectorySize.processFile(DirectorySize.java:71) (the call to my accept() method in my FileNamesEndingWithFileFilterClass)
at DirectorySize.run(DirectorySize.java:106) (the call to my processFile() method)
at TestDirectoryListerPart7.main(TestDirectoryListerPart7.java:37) (the call to my run() method in DirectorySize)
어떤 코드 줄이'DirectorySize.java : 71'입니까? 대부분의 NPE의 경우, 사용하고있는 변수가 null인지, 언제 사용할지 알려주는 것이 중요합니다. –
그렇다면 71 행이'filter = fileFilter.accept (file);'(그렇습니까?)라면 fileFilter는 null입니까? – flup
@ samfisher 나는 당신이 그것을 못질했다고 생각합니다. 대답으로 게시 할 수도 있습니다. –