【发布时间】:2011-12-19 03:52:27
【问题描述】:
我正在编写一个程序,它使用文件 I/O 遍历用户给定的目录,然后将目录添加到通用链表中。我编写的程序在 Ubuntu 上运行良好,但当我尝试在 Windows 上使用它时却无法运行。这是一个相当长的程序,但这是我认为有问题的部分:
private Node<Item> currentNode = new Node<Item>();
public void traverse(File fileObject)
{
File allFiles[] = fileObject.listFiles();
for(File aFile: allFiles){
System.out.println(aFile.getName()); /* debugging */
recursiveTraversal(aFile); /* Line 34 */
}
}
public void recursiveTraversal(File fileObject){
Node<Item> newNode = new Node<Item>();
currentNode.addChild(newNode);
currentNode = newNode;
if (fileObject.isDirectory()){
newNode.setData(new Item());
File allFiles[] = fileObject.listFiles();
for(File aFile : allFiles){ /* This is line 48 */
recursiveTraversal(aFile);
}
}else if (fileObject.isFile()){
newNode.setData(new Item());
}
currentNode = newNode.getParent();
}
当我在 Linux 上使用它时,我可以给它/home/matt/Documents 之类的东西,它可以工作,但是当我在 Windows 上尝试使用 G:\\Users\\Matt\\Documents 时,它会出错。我输入的打印语句实际上打印出文件夹中的文件,但是程序的其余部分有些混乱:
java.lang.NullPointerException
at FileTraverse.recursiveTraversal(FileTraverse.java:48)
at FileTraverse.traverse(FileTraverse.java:34)
at DirectoryMain$ClickAction.actionPerformed(DirectoryMain.java:103)
...
之后有很多错误与该程序正在运行的 Swing GUI 有关,但我认为这与任何事情无关。
编辑:添加与跟踪对应的行号。
【问题讨论】:
-
currentNode对象在您创建之前在哪里创建 -currentNode.addChild(newNode);? -
作为全局变量在我的班级顶部的某个地方。
-
您能否在定义
currentNode时添加该sn-p? FileTraverse.java 中的第 48 行有什么? -
我已在 currentNode 行中添加,并在错误所指的行旁边添加了 cmets。
标签: java windows file io nullpointerexception