Java 使用ResourceSet创建文件
我是Java新手,目前正在尝试使用Eclipse中EMF建模框架中的Java 使用ResourceSet创建文件,java,xml,eclipse,emf,Java,Xml,Eclipse,Emf,我是Java新手,目前正在尝试使用Eclipse中EMF建模框架中的ResourceSet和ResourceFactory。我一直在尝试在文件系统中创建一个具有xml扩展名的新文件。我的代码如下所示: ResourceSet resourceSet =new ResourceSetImpl(); resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("arxml", new XMIResourceImpl(
ResourceSet
和ResourceFactory
。我一直在尝试在文件系统中创建一个具有xml扩展名的新文件。我的代码如下所示:
ResourceSet resourceSet =new ResourceSetImpl();
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("arxml", new XMIResourceImpl());
URI uri =URI.createURI("D:/User/file.xml");
Resource res = resourceSet.createResource(uri);
try{
resource.save(null);
java.lang.System.out.println("success");
} catch (IOException e){
java.lang.System.out.print("no");
}
但是由于一些未知的原因,我没有看到在文件系统中创建任何
file.xml
。我一直试图解决这个问题很长时间,但没有结果。有人能帮我一下吗?这个示例完全错误:URI在ecore元数据中定义了资源的名称空间,而不是序列化资源的实际位置。通常URI来自Ecore模型定义。实际上,您需要将OutputStream传递给Resource.save()而不是null。您还需要向资源中添加一些内容,否则序列化的XMI将为空
例如:
ResourceSet resourceSet = new ResourceSetImpl();
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("arxml", new XMIResourceImpl());
URI uri = URI.createURI("http://example.myorganization.com/");
Resource res = resourceSet.createResource(uri);
// TODO add some content here
// res.getContents().add(...)
try{
resource.save(new FileOutputStream("D:/User/file.xml"));
java.lang.System.out.println("success");
} catch (IOException e){
java.lang.System.out.print("no");
}
这只是一个例子。您需要定义Ecore模型并生成与模型一起使用所需的所有代码。使用
URI.createFileURI
尝试代码示例以创建URI,而不是URI.createURI
。创建的URI将映射到一个文件。我几乎可以肯定XML扩展是自动与XMLResourceImpl
关联的,因此它应该是XML格式的
另外,您使用arxml
扩展名注册了XMIResourceImpl
,但是您的文件扩展名是xml
,因此您不会使用您注册的资源(基本上,您表达的映射在代码段中是无用的)。如果希望使用XMI而不是XML,请更改文件扩展名或覆盖已注册的XML扩展名,或将*
注册为文件扩展名(将所有扩展名映射到XMIResourceImpl
)