我需要从.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文件中获取一些信息。
答案 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对象读取。