2012-04-24 28 views
5

Tôi cần cho ứng dụng Android của tôi để lưu một tập tin xml vào bộ nhớ cache bên ngoài với một tên tập tin có chứa không gian.Lưu tập tin trong Android với không gian trong tên tập tin

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

transformer.transform(source, result); 

Khi tôi duyệt thủ công vào thư mục tệp của mình, tôi tìm thấy tệp này: "Local% 20storage.xml".

Vì vậy, sau khi tôi cố gắng đọc nó với

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

Nhưng tôi có một FileNotFoundException vì các tập tin "storage.xml địa phương" không thể được tìm thấy trên điện thoại của tôi.

Bất kỳ ý tưởng nào để giải quyết vấn đề này? Seb

+0

bạn không nên xây dựng tên tập tin bản thân, sử dụng 'new File (activity.getExternalCacheDir(), "storage.xml địa phương")' - nó sẽ làm điều đó cho bạn. Không có ý tưởng gì gây ra vấn đề của bạn mặc dù – zapl

+0

Cảm ơn câu trả lời này nhưng điều này không giải quyết được vấn đề của tôi. – grattmandu03

Trả lời

6

Thật khó để xác định nguồn gốc của vấn đề này nhưng nó đến từ StreamResult, thay thế khoảng trống trong tên tệp theo% 20. Đã có báo cáo lỗi cho sự cố này here.

Và đây là giải pháp:

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

Cảm ơn một lần nữa để cả hai bạn đã cố gắng để giải quyết vấn đề của tôi.

+0

Cảm ơn câu trả lời. Bạn đã cứu ngày của tôi ở đó. Tôi đã khắc phục vấn đề giống như cách bạn đã làm. – slash33

1

Hãy thử sử dụng mã hóa URL cơ bản:

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

mgiht giúp đỡ này bạn: URL encoding table

Ngoài ra, khi làm việc với các tập tin, chắc chắn rằng bạn đang sử dụng tách tập tin phù hợp với hệ điều hành (trong trường hợp của bạn được mã hóa cứng/nên hoạt động vì Android là dựa trên Linux nhưng chỉ để đảm bảo Đây có thể là một tùy chọn khác:

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

Optin cuối cùng sẽ là để cố gắng để espace không gian. Thử thay thế "" bằng "\".

+0

Tôi thử giải pháp của bạn Erwald trước khi tôi đăng câu hỏi này và tôi không có ngoại lệ, nhưng nó không làm những gì tôi đang mong đợi. Thật vậy, nó tạo ra một tệp xml có tên "Local% 20storage.xml" và không phải là "Local storage.xml". – grattmandu03

+0

Hãy xem câu trả lời cập nhật của tôi. – Erwald

+0

Câu trả lời thứ hai của bạn không hoạt động quá, và bạn không thể thoát khỏi các khoảng trống như thế này "\" trong java. – grattmandu03

3

này làm việc cho tôi và chỉ là một dòng thêm mã

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

Chuyển tiếp dấu gạch chéo hoặc dấu gạch chéo ngược? –

+0

Xin lỗi về những dấu gạch chéo ngược đó tôi sẽ sửa nó. Hi vọng nó sẽ giúp ích cho bạn. –

Các vấn đề liên quan