2012-04-24 15 views
5

Potrzebuję dla mojej aplikacji Android, aby zapisać plik xml do zewnętrznej pamięci podręcznej z nazwą pliku, która zawiera spację.Zapisz plik w systemie Android ze spacjami w nazwie pliku

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

transformer.transform(source, result); 

Kiedy przeglądam ręcznie mój katalog plików, znajduję ten plik: "Lokalny% 20storage.xml".

Więc kiedy po próbie odczytania go

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

Ale mam FileNotFoundException ponieważ plik „storage.xml lokalne” nie można znaleźć na moim urządzeniu.

Wszelkie pomysły na rozwiązanie tego problemu? Seb

+0

nie należy budować Nazwy plików siebie, użyj 'nowy plik (activity.getExternalCacheDir(),„storage.xml lokalny”)' - go zrobię to za Ciebie. Nie mam pojęcia, co powoduje twój problem. – zapl

+0

Dziękuję za tę odpowiedź, ale to nie rozwiązuje mojego problemu. – grattmandu03

Odpowiedz

6

Trudno było zidentyfikować źródło tego problemu, ale pochodzi on z StreamResult, który zastępuje spacje w nazwie pliku przez% 20. Istnieje zgłoszenie błędu dla tego problemu here.

A oto rozwiązanie:

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

Dzięki znowu do was obu na próbuje rozwiązać mój problem.

+0

Dzięki za odpowiedź. Uratowałeś mi tam dzień. Naprawiłem problem w taki sam sposób jak ty. – slash33

1

Spróbuj użyć podstawowe kodowanie URL:

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

to pomóc mgiht Państwo: URL encoding table

Ponadto, podczas pracy z plikiem, upewnij się, że używasz odpowiedniego separatora plików dla systemu operacyjnego (w przypadku ciężko kodowane/powinny działać, ponieważ Android jest oparty na Linuksie, ale po prostu się upewnić To może być inna opcja.

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

Ostatecznym celem jest wypróbowanie kosmosu. Spróbuj zastąpić "" przez "\".

+0

Próbuję twojego rozwiązania Erwald zanim opublikuję to pytanie i nie mam wyjątku, ale nie zrobiłem tego, czego się spodziewam. W rzeczywistości tworzy plik xml o nazwie "Local% 20storage.xml", a nie "Local storage.xml". – grattmandu03

+0

Spójrz na moją zaktualizowaną odpowiedź. – Erwald

+0

Twoja druga odpowiedź też nie działa i nie można uciec spacji, takich jak "\" w java. – grattmandu03

3

Działa to dla mnie, a to tylko jeden dodatkowy wiersz kodu

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

Przesunięcia ukośne lub ukośniki? –

+0

Przepraszam za te ukośniki, poprawię je. Mam nadzieję, że to działa dla ciebie. –

Powiązane problemy