保存在内部存储中的文件没有被保存

问题描述:

我试图将一个xml文件保存到Android的内部存储。但是,该文件没有得到保留。每次我重新启动模拟器时,文件都是空的。当我手动选择在应用程序中写入内容时,该文件只会写入内容。然后,如果我关闭了应用程序或其他内容,文件内容将被保留。但是,当我关闭模拟器时,文件将在那里,但是是空的。保存在内部存储中的文件没有被保存

因此,我不知道我是否正确保存它。

请看看我的代码,可能是我的Android模拟器出现了问题或其某些设置有问题。

public static void store(Context c, String filename, int width, int height, int rooms, int expected_partiters, BSPNode root, Cells cells, int[][] dists, int startX, int startY) 
{ 
    try { 

      DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
      Document doc = docBuilder.newDocument(); 


      // root elements 
      storeMaze(width, height, rooms, expected_partiters, root, cells, dists, startX, startY, doc); 

      String serializedDoc = MazeFileWriter.getStringFromDoc(doc); 
      try { 
       FileOutputStream fos = c.openFileOutput("data_test.xml", Context.MODE_PRIVATE); 
       fos.write(serializedDoc.getBytes()); 
       fos.close(); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

    } catch (ParserConfigurationException pce) { 
     pce.printStackTrace(); 
    } 
} 

static String getStringFromDoc(org.w3c.dom.Document doc) { 
    try 
    { 
     DOMSource domSource = new DOMSource(doc); 
     StringWriter writer = new StringWriter(); 
     StreamResult result = new StreamResult(writer); 
     TransformerFactory tf = TransformerFactory.newInstance(); 
     Transformer transformer = tf.newTransformer(); 
     transformer.transform(domSource, result); 
     writer.flush(); 
     return writer.toString(); 
    } 
    catch(TransformerException ex) 
    { 
     ex.printStackTrace(); 
     return null; 
    } 
} 

我是Android的初学者,所以有任何建议表示赞赏!

如果我正确理解您的代码,您正在阅读部分使用StringWriter。我想你想要一个StringReader。

如果那不是你在那里想要做的(读),我可以看得更远,这正是我所看到的。

+0

该文件被正确写入,我通过Android的DDMS手动检查了文件内容。但是,问题是当我关闭仿真器时文件没有保存。断电后,文件将为空。这可能是原因吗? – mrQWERTY 2014-12-03 02:58:06

+0

getStringFromDoc方法不能读取,但正在写...所以它永远不会返回任何东西。交换阅读,看看它给你什么。 – RiddlerDev 2014-12-03 03:01:46

+0

如果您在仿真器停止之前实际正确读取,请检查您的设置,即仿真器未设置为重置每个负载上的用户数据。 – RiddlerDev 2014-12-03 03:02:51