2012-04-24 14 views
5

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

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"); 

でそれを読んでしよう。しかし、ファイル「ローカルstorage.xmlは」私のデバイス上で見つけることができないので、私はFileNotFoundExceptionをを持っているときの後にそう

これを解決する方法はありますか? セブ

+0

のちょうど1つの余分ラインである' - それはあなたのためにそれを行います。あなたの問題の原因は何も考えていません – zapl

+0

この回答をありがとうが、これは私の問題を解決しません。 – grattmandu03

答えて

6

この問題の原因を特定するのは難しいですが、ファイル名のスペースを%20で置き換えるStreamResultが原因です。この問題のバグ報告hereがあります。私の問題を解決しようとするために、あなたの両方に再び

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(); 
    } 
} 

ありがとう:ここ

およびソリューションです。

+0

答えをありがとう。あなたは私の一日をそこに救った。あなたと同じように問題を解決しました。 – slash33

1

は、基本的なURLエンコードを使用してみてください:

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

このmgihtヘルプあなたは:URL encoding table

をまた、ファイルを扱うとき、あなたはOSのための正しいファイル区切り文字を使用していることを確認してください(あなたのケースでは、ハードコードされている/ Androidは、Linuxベースのので、動作するはずですが、確かに確認してください。

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

最後のオプトインはスペースをエスケープしようとすることでしょう。 「」を「\」に置き換えてください。

+0

私はこの質問を投稿する前にあなたのソリューションErwaldを試していますが、例外はありませんが、私が期待していることはしませんでした。確かに、 "Local storage.xml"ではなく、 "Local%20storage.xml"という名前のxmlファイルが作成されます。 – grattmandu03

+0

私の更新された応答を見てください。 – Erwald

+0

あなたの2番目の答えはうまくいかず、このような "\"というスペースをJavaでエスケープすることはできません。 – grattmandu03

3

これは私のために動作し、あなたが `新しいファイル(activity.getExternalCacheDir()、「ローカルstorage.xml」)を使用し、ファイル名を自分で構築するべきではありませんコード

String fileName = "name with spaces" + ".xml";     
fileName.replace(" ", "\\ "); 
+1

フォワードスラッシュまたはバックスラッシュ? –

+0

バックスラッシュについては申し訳ありませんが修正します。あなたのために働くことを願っています。 –

関連する問題