【问题标题】:Exception java.lang.NullPointerException异常 java.lang.NullPointerException
【发布时间】:2011-12-19 12:09:50
【问题描述】:

我正在使用 java 为 windows 版本的桌面应用程序工作。在我的应用程序中,需要搜索所有 .php

我使用递归方法;

和正则表达式

我的代码:

import java.io.File;


public class Copier {
public static void find(String source,String rep)
{
    File src=new File(rep);
    if(src.exists() && src.isDirectory())
    {
        String[] tab=src.list();
        for(String s:tab)
        {
            File srcc=new File(rep+"\\"+s);
            if(srcc.isFile())
            {  
                if(srcc.getName().matches(".*"+source+"$"))
                System.out.println(s);
            }

            else
                find(source,srcc.getAbsolutePath());
        }
    }
}

public static void main(String[] args)
{
    find(".php","C:\\");
}
}

但我有这个例外:

Exception in thread "main" java.lang.NullPointerException
    at Copier.find(Copier.java:11)
    at Copier.find(Copier.java:21)
    at Copier.main(Copier.java:28)

【问题讨论】:

  • 我的猜测是src.list() 返回了一个空值,但我只是在猜测行数。这可能会发生,例如,因为您无权访问该目录。
  • 是的,但我访问的是管理员
  • 好吧,如果该行是错误的来源,那么由于某种原因,您会收到文件错误。尝试使用canRead 测试位置。

标签: java file exception io nullpointerexception


【解决方案1】:

src.list() 返回空值。这可能是因为您(当前用户)没有对该目录的访问权限。我猜大概是C:\(C盘根目录)。这经常发生,尤其是在 Windows 7 上。

首先尝试使用您具有访问权限的目录来调试您的代码。然后修复您的代码以关心空值。然后尝试以管理员身份运行您的程序。

【讨论】:

  • 我以管理员身份运行我的应用程序,但我在 Copier.find(Copier.java:11) 有这个 apph2.php creditbatch.php details.php :::::: java.lang.NullPointerException在 Copier.find(Copier.java:21) 在 Copier.main(Copier.java:29) `
【解决方案2】:

如下更改 main,用于调试目的。

public static void main(String[] args)
{
    try {
        find(".php","C:\\");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

并在里面添加一个空检查

if (src != null && src.exists() && src.isDirectory())

编辑:

以下对我来说很好用,(我使用的是 Windows 7)。

import java.io.File;

public class Copier {

    public static void find(String source,String rep) {
        File src = new File(rep);
        if (src!= null && src.exists() && src.isDirectory()) {
            String[] tab = src.list();
            if (tab != null) {
                for(String s : tab) {
                    File srcc = new File(rep+"\\"+s);
                    if (srcc.isFile()) {  
                        if (srcc.getName().matches(".*"+source+"$")) {
                            System.out.println(s);
                        }
                    } else {
                        find(source,srcc.getAbsolutePath());
                    }
                }
            } else {
                //System.out.println(" list is null");
            }
        }
    }

    public static void main(String[] args) {
        try {
            find(".java", "C:\\");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

【讨论】:

  • 我尝试但我在 Copier.main(Copier.java) 的 Copier.find(Copier.java:21) 的 Copier.find(Copier.java:11) 有异常 java.lang.NullPointerException: 29)
  • @Anouar 代码适用于“c:\\Work\\”。只有在尝试“c:\”时,我才会得到相同的异常。正如亚历克斯建议的那样,尝试检查管理员权限。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 2015-07-22
相关资源
最近更新 更多