Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ResourceSet创建文件_Java_Xml_Eclipse_Emf - Fatal编程技术网

Java 使用ResourceSet创建文件

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(

我是Java新手,目前正在尝试使用Eclipse中EMF建模框架中的
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