2012-04-24 3 views
5

Мне нужно, чтобы мое приложение Android для сохранения 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"); 

Но у меня есть FileNotFoundException, так как файл «Local storage.xml» не может быть найден на моем устройстве.

Любые идеи для решения этой проблемы? Себ

+0

вы не должны строить FileNames себя, используйте 'новый файл (activity.getExternalCacheDir(), "Local storage.xml")' - это сделают это для вас. Не знаю, что вызывает вашу проблему, хотя – zapl

+0

Спасибо за этот ответ, но это не решает мою проблему. – grattmandu03

ответ

6

Трудно было определить источник этой проблемы, но он исходит от StreamResult, который заменяет пробелы в имени файла на% 20. Для этой проблемы есть сообщение об ошибке 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

Кроме того, при работе с файлом, убедитесь, что вы используете правильный разделитель файлов для ОС (в вашем случае жестко закодированы/должен работать, так как Android является Linux на основе, но только, чтобы убедиться, что Это может быть другой вариант:.

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

Последним вариантом optin было бы попытаться изолировать пространство. Попробуйте заменить "" на "\".

+0

Я пробую ваше решение Эрвальд, прежде чем опубликовать этот вопрос, и у меня нет исключения, но он не сделал того, чего я ожидаю. Действительно, он создает xml-файл с именем «Local% 20storage.xml», а не «Local storage.xml». – grattmandu03

+0

Взгляните на мой обновленный ответ. – Erwald

+0

Ваш второй ответ тоже не работает, и вы не можете избежать пробелов, подобных этому «\» в java. – grattmandu03

3

Это работает для меня, и это только одна дополнительная строка кода

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

Косые черты или косые черты? –

+0

Извините за это, я исправлю это. Надеюсь, это сработает для вас. –

Смежные вопросы