2010-03-16 77 views
18

我想寫一個文件從一個Http post回覆到一個文件sdcard。一切工作正常,直到數據的字節數組被檢索。寫一個文件到SD卡

我試過在清單 中設置WRITE_EXTERNAL_STORAGE權限,並嘗試了許多我在網上找到的教程的不同組合。

所有我能找到的是使用openFileOutput("",MODE_WORLD_READABLE)方法,活動的,但怎麼我的應用程序寫入的文件是通過使用一個線程。具體來說,當一個文件必須被寫入時,從另一個線程調用一個線程,因此即使我嘗試了一個活動對象也不起作用。

的應用程序已經走過了漫長的道路,我不能改變應用程序是如何當前寫入。

請別人幫我嗎?


CODE

File file = new File(bgdmanip.savLocation); 
FileOutputStream filecon = null; 
filecon = new FileOutputStream(file); 

byte[] myByte; 
myByte = Base64Coder.decode(seReply); 

bos.write(myByte); 
filecon.write(myByte); 
myvals = x * 11024; 

bgdmanip.savLocation擁有整個文件路徑。 seReply是來自HttpPost響應的字符串答覆。第二組代碼循環參考x。該文件已創建,但仍爲0字節。

回答

20

openFileOutput()方法寫入數據到應用程序的私有數據區(不是SD卡),所以這可能不是你想要的。您應該能夠撥打Environment.getExternalStorageDirectory()以獲取SD卡的根路徑並使用它創建一個FileOutputStream。從那裏,只需使用標準的java.io例程。

+0

謝謝埃裏希。我像這個「/sdcard/filename.ext」那樣以字符串的形式傳遞完整路徑。該文件也已創建,但文件大小仍爲0字節。另外我不能在eclipse中使用DDMS的推/拉文件控件。 – 2010-03-16 14:47:01

+0

您可能需要發佈一些文件編寫代碼來幫助診斷問題。並非全部,但至少是發生了什麼的基礎知識。另外,您是否在LogCat中看到任何消息? – 2010-03-16 15:04:08

+0

埃裏克,我已經更新了代碼。 沒有關於LogCat中文件操作的消息。我改變了很多代碼,在代碼中出現錯誤,但不記得哪些代碼給了我錯誤。 – 2010-03-17 04:07:16

3

這裏有一個例子:

// Log used as debug 
File log = new File(Environment.getExternalStorageDirectory(), "Log.txt"); 
try { 
    out = new BufferedWriter(new FileWriter(log.getAbsolutePath(), false)); 
    out.write(new Date().toString()); 
    out.write(" : \n"); 
} catch (Exception e) { 
    Log.e(TAG, "Error opening Log.", e); 
} 
28
//------------------------------WRITING DATA TO THE FILE ---------------------------------  

btnWriteSDFile.setOnClickListener(new OnClickListener() 
    { 
    public void onClick(View v) 
    {  

     try { 
      File myFile = new File("/sdcard/mysdfile.txt"); 
      myFile.createNewFile(); 
      FileOutputStream fOut = new FileOutputStream(myFile); 
      OutputStreamWriter myOutWriter =new OutputStreamWriter(fOut); 
      myOutWriter.append(txtData.getText()); 
      myOutWriter.close(); 
      fOut.close(); 
      Toast.makeText(v.getContext(),"Done writing SD 'mysdfile.txt'", Toast.LENGTH_SHORT).show(); 
      txtData.setText(""); 
     } 
     catch (Exception e) 
     { 
      Toast.makeText(v.getContext(), e.getMessage(),Toast.LENGTH_SHORT).show(); 
     } 
    } 


    }); 

//---------------------------READING DATA FROM THE FILE PLACED IN SDCARD-------------------//  
     btnReadSDFile.setOnClickListener(new OnClickListener() 
     { 

     public void onClick(View v) 
     { 

     try { 

      File myFile = new File("/sdcard/mysdfile.txt"); 
      FileInputStream fIn = new FileInputStream(myFile); 
      BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn)); 
      String aDataRow = ""; 
      String aBuffer = ""; 
      while ((aDataRow = myReader.readLine()) != null) 
      { 
       aBuffer += aDataRow ; 
      } 
      txtData.setText(aBuffer); 
      myReader.close(); 
      Toast.makeText(v.getContext(),"Done reading SD 'mysdfile.txt'",Toast.LENGTH_SHORT).show(); 
     } 
     catch (Exception e) 
     { 
      Toast.makeText(v.getContext(), e.getMessage(),Toast.LENGTH_SHORT).show(); 
     } 
     } 
     }); 

隨着這也寫不出這個權限在Android.Manifest

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

多數民衆贊成在我們這裏稱爲程序員的看法 – 2013-06-29 19:12:36

+0

而不是edittext我想傳遞兩個字符串值並將它們存儲在SD卡中的文件。我怎麼能做到這一點? – AndroidOptimist 2013-11-15 06:01:01

+0

@Alliswell請點擊此鏈接,希望你能得到你的解決方案http://stackoverflow.com/questions/9962896/store-data-text-to-sd-card-in-android – 2013-11-15 19:34:25