6

Android アプリケーションで、スペースを含むファイル名で xml ファイルを外部キャッシュに保存する必要があります。

DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(activity
                    .getExternalCacheDir().getAbsolutePath()
                    + "/Local storage.xml"));

transformer.transform(source, result);

ファイル ディレクトリを手動で参照すると、「Local%20storage.xml」というファイルが見つかります。

それで、私がそれを読み込もうとすると

File localStorageXmlFile = new File(activity.getExternalCacheDir()
                .getAbsolutePath()
                + "/Local storage.xml");

しかし、ファイル "Local storage.xml" がデバイスで見つからないため、FileNotFoundException が発生します。

これを解決するためのアイデアはありますか?セブ

4

3 に答える 3

6

この問題の原因を特定するのは困難でしたが、これはファイル名のスペースを %20 に置き換える StreamResult によるものです。この問題に関するバグ レポートはこちらにあります

そして、ここに解決策があります:

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);

FileOutputStream fos = null;
try {
    fos = new FileOutputStream(new File(activity
                .getExternalCacheDir().getAbsolutePath()
                + "/" + "Local storage" + ".xml"));
    Result fileResult = new StreamResult(fos);
    transformer.transform(source, fileResult);
} catch (FileNotFoundException e) {
    e.printStackTrace();
} finally {
    if (fos != null) {
        fos.close();
    }
}

私の問題を解決しようとしてくれてありがとう。

于 2012-04-25T08:34:46.230 に答える
4

これは私にとってはうまくいき、コードの1行だけです

String fileName = "name with spaces" + ".xml";                  
fileName.replace(" ", "\\ ");
于 2013-05-12T15:46:46.310 に答える
1

基本的な URL エンコーディングを使用してみてください:

File localStorageXmlFile = new File(activity.getExternalCacheDir()
                .getAbsolutePath()
                + "/Local%20storage.xml");

この mgiht はあなたを助ける: URL エンコーディング テーブル

また、ファイルを操作するときは、OS に適したファイル区切り記号を使用していることを確認してください (あなたの場合、Android は Linux ベースであるため、ハードコードされた / が機能するはずですが、念のため確認してください。これは別のオプションである可能性があります。

File localStorageXmlFile = new File(activity.getExternalCacheDir()
                .getAbsolutePath() + File.separator 
                + "Local storage.xml");

最後の手段は、スペースをエスケープしようとすることです。" " を "\ " に置き換えてみてください。

于 2012-04-24T16:10:01.387 に答える