从.iso获取文件系统无法使用循环和常见的 vfs。(爪哇)



我需要(仅)从.iso文件中读取文件系统。我使用"commons-vfs"(vfs2之前的包)和"loopy"插件来做到这一点。(缺乏示例和绝对没有关于loopy的文档,使得理解该做什么变得更加困难)

如果我启动应用程序,这个异常将被抛出:

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文件中获取一些信息。

在您的项目中导入jar之后(您还可以添加maven依赖项loop -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可用的方法。您可以在isoFile上再次使用resolveFile("file")来检索iso中的文件,然后使用getContent()来获取您可以读取的FileContent对象。

最新更新