2013-08-28 86 views
9

我正在使用Apache Commons VFS2(虚拟文件系统)监视目录中的更改文件。 org.apache.commons.vfs2.FileListener返回org.apache.commons.vfs2.FileObject。如何转换一个org.apache.commons.vfs2.FileObjectjava.io.File将FileObject转换为文件

+0

这只是一个界面。你在使用什么实现? –

+0

如果你的意思是FileListener,那么所有的方法都返回FileObject –

+0

no。 FileObject是一个接口。试着找出具体实现返回的是什么。 –

回答

2

您可以使用

new File(fileobject.getName().getPath()); 

注意一个VFS文件对象不一定引用一个真实的文件,它也可以用于例如一个zip文件中引用的文件。取决于您用来获取文件对象的解析器。

其他参考:

  1. [VFS-443] Need an easy way to convert from a FileObject to a File - ASF JIRA
+0

我不认为这将工作,如果FileObject表示一个zip文件。 –

+0

它不起作用 – doanduyhai

+0

特别是在Windows上,因为它只返回卷上的路径,而不是机器上的路径。 – Riduidel

0

org.apache.commons.vfs2.FileObject是一个接口。 我的猜测是,你是用下面的实施org.apache.commons.vfs2.provider.local.LocalFile

这个类提供的方法getLocalFile()其返回类java.io.File

如果不处理一个LocalFile大多数其他实现方式的提供的对象工作doGetInputStream()它可以用来创建一个File对象

+1

'getLocalFile()'不幸受到保护(如javadoc所示),使得它不可用。 – Riduidel

+0

这是真的!没有看到。感谢您指出 –

4
fileobject.getURL().getFile() 

应该可以工作。需要注意的是,我们需要先将它转换为Java URL对象,然后才能用它来解析文件。