2012-05-07 40 views
1

我有一個Android應用程序,我需要保存一個文件。 我創建這樣的文件:Android將文件保存到內部存儲器時工作,而對SD卡失敗

FileOutputStream fOut = openFileOutput(fileName, 
        MODE_WORLD_READABLE); 
      osw = new OutputStreamWriter(fOut); 

我打開它是這樣的:

FileInputStream srcFileStream = openFileInput(fileName); 

這正常工作與內部存儲器中的文件。 我已經爲我的應用程序添加了一個選項,用戶可以選擇將該文件保存到SD卡上。 我試試這個命令:

if (Prefs.getCard(this)) 
     fileName="/sdcard/"+fileName; 

也就是說如果Prefrences是肯定的,我添加文件名的「/ SD卡/」盈。 代碼的其餘部分保持不變,

這似乎並沒有工作,因爲我得到一個異常:

File /sd/file1 contains a path seperator 

我如何使用相同的代碼都保存到SD卡和內部記憶,只是一個小的修改,因爲我上面試過?

+0

您必須打開流普通的老Java方式。 'Context'的文件操作不允許子目錄,只能在你的內部應用程序目錄中工作 – zapl

+0

當我這樣做時,我得到:打開失敗:EACCES(Permision denied) – Programer

回答

2

這應該工作..

String baseDir = ""; 
String fileName = "myFile.txt"; 
FileOutputStream fOut = null; 
if (Prefs.getCard(this)) { 
    baseDir = Environment.getExternalStorageDirectory().getAbsolutePath(); 
    File file = new File(baseDir + fileName); 
    fOut = new FileOutputStream(file) 
} else { 
    fOut = openFileOutput(fileName, MODE_WORLD_READABLE); 
} 
if (fOut != null) { 
    osw = new OutputStreamWriter(fOut); 
    ... 
} 
+0

這給了我的SD路徑?但內部呢?我需要兩個解決方案 – Programer

+0

不適用於內部? – Ronnie

+0

不,它給出路徑/ mt/sd /文件名,而內部是別的。 – Programer

0

編輯被毆打它由七人欖球賽:

你可以嘗試這樣的事:

File f = Environment.getExternalStorageDirectory(); 
String fullfilename = f.getAbsoluteFile() + "/Android/data/NameOfApp/fileshere/" ; 

File folderToWrite = new File(fullfilename); 
folderToWrite.mkdirs(); 

File fileToWrite = new File(fullfilename,"filename.txt"); 
+0

我不明白,文件路徑是SD還是內部? – Programer

3

你肯定沒忘在清單中添加正確的權限...

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

您也可以嘗試使用訪問外部路徑:

Environment.getExternalStorageDirectory(); 

我已經看到了不同的外部路徑名,具體取決於設備...