
[英]Getting TDS driver - java.lang.NullPointerException. this exception is not consistent
[英]File java.lang.NullPointerException. error
我下面有以下代码,用于列出特定文件夹/目录中的所有文件。
对于Mac,这是完美的工作方式,但是当涉及到Windows时,我得到了java.lang.NullPointerException。 我不确定要如何解决它,我知道这意味着将目录File变量之一放入函数时作为Null传递。 但是我不确定如何检查目录是否为空,以及为什么它仅在该特定目录上会产生错误,因为它可以在所有其他目录上工作,而无法使用的目录只是Windows上的常规文档目录。 我对显示java.lang.NullPointerException错误的三行做了一点评论。
我还试图通过围绕文件列表功能来检查文件夹是否为空来修复它。 但这不起作用,因为已经很晚了,在File变量声明中已经发生了null错误。
public static void main() throws IOException {
if (isMac()) {
listFilesForFolderMac(folderMac1);
listFilesForFolderMac(folderMac2);
listFilesForFolderMac(folderMac3);
listFilesForFolderMac(folderMac4);
listFilesForFolderMac(folderMac5);
listFilesForFolderMac(folderMac6);
listFilesForFolderMac(folderMac7);
} else if (isWindows()) {
listFilesForFolderWin(folderWin1);
listFilesForFolderWin(folderWin2);
listFilesForFolderWin(folderWin3);
listFilesForFolderWin(folderWin4);
listFilesForFolderWin(folderWin5);
listFilesForFolderWin(folderWin6);
}
}
public static boolean isWindows() {
return (OS.indexOf("win") >= 0);
}
public static boolean isMac() {
return (OS.indexOf("mac") >= 0);
}
public static void listFilesForFolderMac(final File folder) throws IOException {
PrintWriter writToDoc = new PrintWriter(new FileWriter("/Users/" + username + "/Documents/files.txt",true));
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isDirectory()) {
listFilesForFolderMac(fileEntry);
} else {
writToDoc.println(fileEntry.getName());
}
}
writToDoc.close();
}
public static void listFilesForFolderWin(final File folder) throws IOException {
PrintWriter writToDoc = new PrintWriter(new FileWriter("c:\\users\\" + username + "\\Documents\\files.txt",true));
for (final File fileEntry : folder.listFiles()) { //Error here
if (fileEntry.isDirectory()) {
listFilesForFolderWin(fileEntry); //Error here
} else {
writToDoc.println(fileEntry.getName());
}
}
writToDoc.close();
}
final static File folderMac1 = new File("/Users/" + username + "/Pictures");
final static File folderMac2 = new File("/Users/" + username + "/Documents");
final static File folderMac3 = new File("/Users/" + username + "/Movies");
final static File folderMac4 = new File("/Users/" + username + "/Music");
final static File folderMac5 = new File("/Users/" + username + "/Downloads");
final static File folderMac6 = new File("/Users/" + username + "/Applications");
final static File folderMac7 = new File("/Users/" + username + "/Desktop");
final static File folderWin1 = new File("C:\\Users\\" + username + "\\Desktop");
final static File folderWin2 = new File("C:\\Users\\" + username + "\\Downloads");
final static File folderWin3 = new File("C:\\Users\\" + username + "\\Documents"); //Error here
final static File folderWin4 = new File("C:\\Users\\" + username + "\\Pictures");
final static File folderWin5 = new File("C:\\Users\\" + username + "\\Music");
final static File folderWin6 = new File("C:\\Users\\" + username + "\\Videos");
我收到以下错误消息。
Exception in thread "main" java.lang.NullPointerException
at script.MyClass.listFilesForFolderWin(MyClass.java:200)
at script.MyClass.listFilesForFolderWin(MyClass.java:202)
at script.MyClass.main(MyClass.java:155)
我搞砸了Java拥有的文件命令,通常当您得到NullPointerExcpetion时,这意味着您指定的目录是错误的。 我尚未在Windows上运行您的代码,但是对于该平台,您需要做的就是遵循与Mac路径相同的文件结构。 这是您的第一个变量应为:
final static File folderWin1 = new File("C:/Users/" + username + "/Pictures");
其余所有变量均应遵循相同的结构。 我希望这可以解决您的问题。
Windows中有一些Java可以看到但看不到的文件夹,以及一些被视为目录的文件。 要解决您的问题,只需在尝试列出文件之前检查一下即可:
if (fileEntry.isDirectory()&&fileEntry.listFiles()!=null) {
listFilesForFolderWin(fileEntry);
}
java.util.File
无法处理Window的“连接”(一种符号链接),例如“我的文档”和“图片”
您将需要切换到NIO2 API并使用Paths
API。
请参阅遍历文件树 ,其中实际上有一个处理符号链接的示例
从上面的链接中提取
@Override
public FileVisitResult visitFile(Path file,
BasicFileAttributes attr) {
if (attr.isSymbolicLink()) {
System.out.format("Symbolic link: %s ", file);
} else if (attr.isRegularFile()) {
System.out.format("Regular file: %s ", file);
} else {
System.out.format("Other: %s ", file);
}
System.out.println("(" + attr.size() + "bytes)");
return CONTINUE;
}
您可能还希望查看链接,符号或其他内容,以获取更多详细信息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.