我想将输出stream转换为String对象

我想将一个OutputStream转换成一个String对象。 编组JAXB对象后,我有一个OutputStream对象返回。

不是很熟悉jaxb,从我能find的你可以转换成一个string使用

 public String asString(JAXBContext pContext, Object pObject) throws JAXBException { java.io.StringWriter sw = new StringWriter(); Marshaller marshaller = pContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); marshaller.marshal(pObject, sw); return sw.toString(); } 

ws.apache.org

但是我不确定一个混乱的对象。 仍在search中。

**编辑

编组一个非元素

另一个常见的用例是你有一个没有@XmlRootElement的对象。 JAXB允许你这样编组:

marshaller.marshal(新的JAXBElement(
新的QName(“”,“rootTag”),Point.class,new Point(…)));

这将元素作为根元素,然后是对象的内容。 实际上,您可以将其与具有@XmlRootElement的类一起使用,只需重命名根元素名称即可。

乍一看,第二个Point.class参数可能看起来多余,但实际上有必要确定编组器是否会产生(声名狼借的)@xsi:type。 在这个例子中,类和实例都是Point,所以你不会看到@xsi:type。 但是,如果他们不同,你会看到它。

这也可以用来编组一个简单的对象,比如String或者一个整数。

marshaller.marshal(新的JAXBElement(
新的QName(“”,“rootTag”),String.class,“foo bar”));

但不幸的是,它不能被用来像列表或地图这样的对象进行编组,因为它们并不是JAXB世界中的头等公民。

在这里find

  StringWriter sw = new StringWriter(); com.integra.xml.Integracao integracao = new Integracao(); integracao.add(...); try { JAXBContext context = JAXBContext.newInstance("com.integra.xml"); Marshaller marshaller = context.createMarshaller(); marshaller.marshal(integracao, sw ); System.out.println(sw.toString()); } catch (JAXBException e) { e.printStackTrace(); } 
 public String readFile(String pathname) throws IOException { File file = new File(pathname); StringBuilder fileContents = new StringBuilder((int) file.length()); Scanner scanner = new Scanner(file); String lineSeparator = System.getProperty("line.separator"); try { while (scanner.hasNextLine()) { fileContents.append(scanner.nextLine() + lineSeparator); } return fileContents.toString(); } finally { scanner.close(); } } 

处理XML并将其转换为string的方法。

 JAXBContext jc = JAXBContext.newInstance(ClassMatchingStartofXMLTags.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); //store filepath to be used String filePath = "YourXMLFile.xml"; File xmlFile = new File(filePath); //Set up xml Marshaller ClassMatchingStartofXMLTags xmlMarshaller = (ClassMatchingStartofXMLTags) unmarshaller.unmarshal(xmlFileEdit); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // Use marshall to output the contents of the xml file System.out.println("Marshalled XML\n"); marshaller.marshal(xmlMarshaller, System.out); //Use Readfile method to convert the XML to a string and output the results System.out.println("\nXML to String"); String strFile = ReadFile(xmlFile) System.out.println(strFile); 

你的类中的方法来获取XML和马歇尔它编辑上述方法将输出编组的XML和XML作为一个string。

是的,有办法做到这一点:只要将string作者作为input传递给它。 所以它创build的XML将被写入它

  public void saveSettings() throws IOException { FileOutputStream os = null; //Declare a StringWriter to which the output has to go StringWriter sw = new StringWriter(); try { Answer ans1=new Answer(101,"java is a programming language","ravi"); Answer ans2=new Answer(102,"java is a platform","john"); ArrayList<Answer> list=new ArrayList<Answer>(); list.add(ans1); list.add(ans2); settings=new Question(1,"What is java?",list); os = new FileOutputStream(FILE_NAME); this.marshaller.marshal(settings, new StreamResult(sw)); System.out.println(sw.toString()); new File(FILE_NAME).delete(); } finally { if (os != null) { os.close(); } } }