1

LibGDXを使用してゲームを作成していて、XMLファイルを保存しようとしていますが、常に例外があります(java.io.FileNotFoundException:/data/Slugfest/teams/Team1.xml:open failed:ENOENT(No suchファイルまたはディレクトリ))ファイルを保存するとき。このコードはファイルを保存します。

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権限が含まれています。

4

1 に答える 1

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に保存します。また、ファイルをチェックし、そこにある場合は削除します。あなたはそれを必要としないかもしれませんが、これはあなたがそれを必要とすることをするべきである包括的なアルゴリズムです。あなたが必要なものを取る。

それが役に立てば幸い。

于 2012-07-11T03:11:15.527 に答える