gpt4 book ai didi

java - 我需要帮助弄清楚如何阻止我的程序抛出 NullPointerException

转载 作者:太空宇宙 更新时间:2023-11-04 07:17:44 25 4
gpt4 key购买 nike

我在尝试运行程序时遇到了这个恼人的问题,即抛出空指针异常。

我现在正在开发的这个项目是我仍在开发的项目的另一个扩展。

在这一部分中,我只是添加了一个 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);
}
}

运行此程序时,processFile() 方法中的 FileFilter 和 File 的值都返回空指针异常。
这是我收到的详细错误消息:

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)

最佳答案

您正在检查 fileFilter 是否为空,如果为空,您只需将其打印到控制台并继续,稍后尝试使用该对象。自然地,它会抛出一个NullPointerException。您可能希望在 if 中返回(或者确保您没有将 null fileFilter 传递给您的 processFile 方法)。像这样:

if(fileFilter == null)
{
System.out.println("I want a file filter!");
return;
}

关于java - 我需要帮助弄清楚如何阻止我的程序抛出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19748920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com