从.iso获取文件系统不能使用loopy和common vfs。 (JAVA)

时间:2014-06-20 06:20:03

标签: java iso

我需要从.iso文件中读取(仅)文件系统。 我使用“commons-vfs”(pre vfs2 package)和“loopy”插件来执行此操作。 (缺乏示例,绝对没有关于loopy的文档,使得理解todo更加困难)

如果我启动应用程序,则抛出此异常:

Exception in thread "AWT-EventQueue-0" java.lang.AbstractMethodError: org.apache.commons.vfs.provider.AbstractLayeredFileProvider.parseUri(Ljava/lang/String;)Lorg/apache/commons/vfs/FileName;
at org.apache.commons.vfs.provider.AbstractLayeredFileProvider.findFile(AbstractLayeredFileProvider.java:48)
at org.apache.commons.vfs.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:505)
at org.apache.commons.vfs.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:483)
at org.apache.commons.vfs.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:453)
at ddViewer.launcher.Launcher.jButton2ActionPerformed(Launcher.java:145)
at ddViewer.launcher.Launcher.access$200(Launcher.java:24)
at ddViewer.launcher.Launcher$3.actionPerformed(Launcher.java:74)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6527)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6292)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4883)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2739)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:719)
at java.awt.EventQueue$4.run(EventQueue.java:717)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

代码:

this.fileSystemManager = new DefaultFileSystemManager(); //global
.
.   
.
File iso = new File(jTextField_chosenISO.getText());
        if (iso.exists()) {
            try {                         
                this.fileSystemManager.addProvider("iso", new IsoFileProvider());

                String filePath = iso.getAbsolutePath();
                filePath = filePath.replaceAll("\\\\", "/");
                System.out.println(filePath);

                IsoFileObject ifo = (IsoFileObject)this.fileSystemManager.resolveFile("iso:"+filePath);
                //do stuff

            } catch (FileSystemException ex) {
                Logger.getLogger(Launcher.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

欢迎从.iso文件获取文件系统的任何其他方法。 只需要从这个该死的iso中包含的.txt文件中获取一些信息。

1 个答案:

答案 0 :(得分:2)

在项目中导入jar后(您还可以添加maven依赖关系loopy-vfs),您可以像打开任何其他Apache Common VFS一样打开文件:

import org.apache.commons.vfs.*;

public class IsoReader {

    public static void main(String[] args) throws FileSystemException {
        FileSystemManager fsManager = VFS.getManager();
        FileObject isoFile = fsManager.resolveFile("iso:/path/to/file.iso");
    }

}

之后,您可以使用FileObject的可用方法。您可以在resolveFile("file")上再次使用isoFile来检索 iso 中的文件,然后使用getContent()获取您可以使用的FileContent对象读取。