2017-04-12 117 views
0

我正在使用HTC Desire 610進行Android開發。我按照其他問題的例子回答了相同的問題,但我所有的文件都保存在內部設備存儲器中,而不是SD卡。手機可以識別SD卡,並且可以在手機內將文件傳輸到SD卡。文件保存到內部存儲,而不是SD卡

我試圖硬編碼到SD卡的文件路徑,我也嘗試在沒有插入計算機的情況下運行應用程序 - 一切都無濟於事。我的應用程序能夠將這些文件直接保存到SD卡是非常重要的。有任何想法嗎?

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    writeDataToFile("2394872934729348"); 

} 


public void writeDataToFile(String data){ 
    BufferedWriter bufferedWriter = null; 

    String dataOutFileName = Environment.getExternalStorageDirectory().getAbsolutePath()+"/data.txt"; 

    try{ 
     bufferedWriter = new BufferedWriter(new FileWriter(dataOutFileName,true)); 
     bufferedWriter.write(data); 
     bufferedWriter.flush(); 
    } 
    catch (IOException e){ 
     e.printStackTrace(); 
    } 
    finally { 
     try { 
      if(bufferedWriter != null){ 
       bufferedWriter.close(); 
      } 
     } catch (IOException e){ 
      e.printStackTrace(); 
     } 
    } 

    MediaScannerConnection.scanFile(this,new String[]{dataOutFileName}, null,null); 
} 
} 

編輯: 我現在嘗試此。我得到一個FileNotFoundException異常,除非我直接寫包文件(com.mypackage等)

File dataDir = new File("/storage/ext_sd/Data/"); 
    dataDir.mkdirs(); 
    File outputFile = new File(dataDir,"data.txt"); 

    try{ 
     FileOutputStream fos = new FileOutputStream(outputFile); 
     OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fos); 
     outputStreamWriter.write(data); 
     outputStreamWriter.close(); 

    } 
    catch (IOException e){ 
     Log.e("Exception", "File write failed: " + e.toString()); 
    } 
+2

代碼中沒有任何內容與[可移動存儲](https://commonsware.com/blog/2014/04/09/storage-situation-removable-storage.html)有關。您正在寫作Android SDK引用的內容(外部存儲器)(https://commonsware.com/blog/2014/04/08/storage-situation-external-storage.html)。使用'getExternalFilesDirs()'獲取應用程序可以在外部和可移動存儲上寫入的位置。 – CommonsWare

回答

1

要訪問外部存儲上的專用存儲目錄,請使用getExternalFilesDirs()而不是getExternalStorageDirectory()。

它會返回一個數組,每個位置都有條目。數組中的第一個條目被認爲是主要的外部存儲,您應該使用該位置,除非它已滿或不可用。有關詳細說明,請參閱Android API指南中的Using the External Storage

+0

謝謝,這工作!是不是可以創建自己的目錄,還是必須寫入我的應用程序的包名稱目錄? – emhomm4

+1

不客氣。當然你可以創建一個目錄。檢查[this](http://stackoverflow.com/questions/2130932/how-to-create-directory-automatically-on-sd-card)。 –

+0

每次我調用「getExternalFilesDirs()」時,它只會列出SD卡上我的應用程序包目錄中的文件。它不會讓我mkdir()在SD卡上,除非它在我的軟件包目錄中。 – emhomm4

0

你有沒有給在AndroidManifest.xml您的應用程序正確的權限? 如果您還沒有這樣做的話,你就需要通過添加下面的清單中的線,讓您的應用程序寫入SD卡的正確權限:

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

也許這就是問題所在

+0

我確實有這個,謝謝。 – emhomm4