2012-07-11 129 views
1

我正在用LibGDX编写游戏,我试图保存一个XML文件,但总是有一个异常(java.io.FileNotFoundException:/ data/Slugfest/teams/Team1 .xml:打开失败:ENOENT(无此文件或目录))保存文件时。该代码保存文件。Android XML文件不保存

public void save() { 
    try { 
     TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
     Transformer transformer = transformerFactory.newTransformer(); 
     DOMSource source = new DOMSource(doc); 
     StreamResult result; 

     if (Gdx.app.getType() == ApplicationType.Android) { 
      result = new StreamResult(new File("/data/Slugfest/teams/" + name + ".xml")); 
     } else { 
      result = new StreamResult(new File(name + ".xml")); 
     } 
     transformer.transform(source, result); 
     Gdx.app.log("Slugfest", "File saved."); 
    } catch (TransformerException tfe) { 
     Gdx.app.log("Slugfest", tfe.getLocalizedMessage()); 
    } 
} 

顺便说一下,我的清单文件包含WRITE/READ_EXTERNAL_STORAGE权限。

+1

我不知道'LibGDX',但在简单的android的情况下,你需要做一个dir,如果它不可用。像'File dir = new File(“path to file”);'然后 if(dir.exists()== false){dir.exists()== false){dir.mkdirs(); } 然后用于文件 File file = new File(dir,fileName); – 2012-07-11 02:50:52

回答

1

您需要创建您要保存的目录。你应该检查它是否存在,如果不存在,创建它。事情是这样的:

if (Environment.getExternalStorageState() == null) { 
       directory = new File(Environment.getDataDirectory() 
         + "/RobotiumTestLog/"); 
       photoDirectory = new File(Environment.getDataDirectory() 
         + "/Robotium-Screenshots/"); 
       /* 
       * this checks to see if there are any previous test photo files 
       * if there are any photos, they are deleted for the sake of 
       * memory 
       */ 
       if (photoDirectory.exists()) { 
        File[] dirFiles = photoDirectory.listFiles(); 
        if (dirFiles.length != 0) { 
         for (int ii = 0; ii <= dirFiles.length; ii++) { 
          dirFiles[ii].delete(); 
         } 
        } 
       } 
       // if no directory exists, create new directory 
       if (!directory.exists()) { 
        directory.mkdir(); 
       } 

       // if phone DOES have sd card 
      } else if (Environment.getExternalStorageState() != null) { 
       // search for directory on SD card 
       directory = new File(Environment.getExternalStorageDirectory() 
         + "/RobotiumTestLog/"); 
       photoDirectory = new File(
         Environment.getExternalStorageDirectory() 
           + "/Robotium-Screenshots/"); 
       if (photoDirectory.exists()) { 
        File[] dirFiles = photoDirectory.listFiles(); 
        if (dirFiles.length > 0) { 
         for (int ii = 0; ii < dirFiles.length; ii++) { 
          dirFiles[ii].delete(); 
         } 
         dirFiles = null; 
        } 
       } 
       // if no directory exists, create new directory to store test 
       // results 
       if (!directory.exists()) { 
        directory.mkdir(); 
       } 
      } 

在这里我检查,看看是否有一个SD卡,如果没有,我本地保存,否则,我保存到SD。我也检查文件,如果他们在那里删除。你可能不需要,但这是一个全面的算法,应该做你需要的。你要什么就拿。

希望它有帮助。

+1

谢谢!这完美的作品! – Shane 2012-07-11 03:34:57

+0

不客气!很高兴我能帮上忙!随意接受和upvote,如果你喜欢:) – BlackHatSamurai 2012-07-11 03:35:30