【问题标题】:Can a method return a file?方法可以返回文件吗?
【发布时间】:2012-01-23 16:05:32
【问题描述】:

我的 Java 代码有问题。 我想将一个文件(用于准确性的 xml 文件)作为方法的输入参数传递。我粘贴我的代码:

public File searchPlaces(){

     URL url = getClass().getResource("arml.xml");
     File file = new File(url.getPath());

     return file;
}

当我尝试调用此方法时出现 NullPointerException。

有人可以帮助我吗?

【问题讨论】:

  • 哪一行抛出空引用异常?
  • 找不到您的 XML 文件(我猜url 为空)
  • 日志跟踪?你得到的概率是哪条线?
  • 我已经调试过了,url为空。我必须包含文件的路径?

标签: java file types return


【解决方案1】:

您未能检查“url”是否使用非空值初始化。

一旦您拥有一个有效的非空 URL,您就可以尝试从中创建一个 File 对象。您可能必须检查文件是否也是非 Null (或者可能允许此方法返回 null 项)。无论哪种方式,在 Java 中返回一个空项(文件或其他)都是完全可以接受的。

取消对 null 的引用(在不引用任何内容的对象引用上调用方法)不是。这就是您在

处收到错误的原因
url.getPath()

您只是错误地识别了失败的地方。

【讨论】:

  • 我已经调试过了,url为空。我必须包含文件的路径?
  • 视情况而定。您正在尝试加载相对于类的文件。如果文件打包在JAR 文件中,这是正确的处理方式。如果文件位于独立于类位置的某个位置,那么您可能应该跳过Class.getResource(...) 并使用File 方法之一直接打开File。假设你确实想从一个类加载,那么我会用绝对路径(从 jar 文件的根目录)再试一次,比如/com/myname/mydir/arm1.xml
  • 它返回 NullPointerException,我修改我的代码: URL url = getClass().getResource("C:\\WebS\\test\\arml.xml");
  • @user917651,您正试图在与您的班级位置无关的位置获取文件。使用new File 而不是getClass().getResource(...),因为该文件不在与类相关的位置。
  • 你能发一个例子吗?
【解决方案2】:

是的,你可以。如果 new File() 调用产生异常,您可能会得到一个空指针。

调试看看你的Url是否不为空。

【讨论】:

  • 我已经调试过了,url为空。我必须包含文件的路径?
  • 是的。 URL 应该有一个开始的方案。参考这个。 docs.oracle.com/javase/6/docs/api/java/net/…
  • 它返回 NullPointerException,我修改我的代码: URL url = getClass().getResource("C:\\WebS\\test\\arml.xml");
  • 我不确定您到底想做什么。试试这个并调试。 getClass().getResource("\arml.xml");
【解决方案3】:

您可能想要在这里做的不是返回 File 对象,而是返回 BufferedReader 或 FileReader,或者可能是 FileInputStream。然后,使用 try/catch 将所有错误处理封装在方法中,或者使用 throws 声明将错误冒泡。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-27
    • 2011-12-10
    • 1970-01-01
    • 2012-06-22
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多