【问题标题】:How to get a proper folder handle from a URI in Java?如何从 Java 中的 URI 获取正确的文件夹句柄?
【发布时间】:2011-12-07 14:36:52
【问题描述】:

我注意到一个小问题。我的应用程序得到的是文件的 URI,例如file:///C:/temp/somefolder/somedocument.txt 作为字符串。

我的应用程序要做的是检查文件夹中的更多文件并处理它们。为此,我通常会做类似的事情

File file = new File(myURI);
File folder = file.getParentFile();
File[] peers = folder.getParentFile().listFiles();

不幸的是,当您使用 URI 时,这似乎根本不起作用。 .listFiles 始终返回 null,即使我打开文件夹 URI 的 File() 句柄。

任何想法如何解决这个问题?

P.S.:Filejava.net.URI 的任何方法都不会返回不是 URI 的绝对路径;)

【问题讨论】:

  • 代码很好,工作正常。如果抛出任何异常,请发布堆栈跟踪。
  • myURI 是 URI 类型的对象还是字符串?必须是前者。
  • 我得到一个字符串。而且没有任何例外。 listFiles 只是 null ;)

标签: java file uri


【解决方案1】:

您的myURI 实际上是StringURI 表示。您正在调用的File 的构造函数是

public File(String pathname)

请注意 pathname 位,它不是 URI-ish 值。

试试

File file = new File(new URI(myURI));

【讨论】:

  • 非常感谢。这实际上奏效了。奇怪的是,打开文件句柄并使用它可以很好地使用 URI-ish 字符串作为参数。只有当你尝试目录操作时它才会开始表现得很奇怪......
【解决方案2】:

试试:

File file = new File(myURI);
File[] peers = new File(file.getParent()).listFiles();

这对我有用。但是,如果我使用您的代码,当我调用 getParentFile()

时会得到 NPE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 2014-05-22
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多