2010-03-16 15 views
18

Sto provando a scrivere un file da una risposta post Http a un file su sdcard. Tutto funziona correttamente finché non viene recuperata la matrice di byte dei dati.Scrittura di un file su sdcard

Ho provato a impostare l'autorizzazione WRITE_EXTERNAL_STORAGE nel file manifest e ho provato molte diverse combinazioni di tutorial che ho trovato in rete.

Tutto quello che riuscivo a trovare era l'utilizzo del metodo openFileOutput("",MODE_WORLD_READABLE) dell'attività, ma il modo in cui il file di scrittura dell'app è utilizzando un thread. In particolare, un thread è invocato da un altro thread quando un file deve essere scritto, , quindi dare un oggetto attività non ha funzionato anche se l'ho provato.

L'app ha fatto molta strada e non posso modificare il modo in cui l'app è attualmente scritta.

Per favore, qualcuno mi aiuti?


CODICE:

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 detiene l'intero percorso dei file. seReply è una risposta stringa dalla risposta HttpPost. Il secondo set di codice viene eseguito in loop con riferimento a x. Il file viene creato ma rimane 0 byte.

risposta

20

Il metodo openFileOutput() scrive i dati nell'area di dati privati ​​dell'applicazione (non la scheda SD), quindi probabilmente non è ciò che si desidera. Dovresti essere in grado di chiamare Environment.getExternalStorageDirectory() per ottenere il percorso di root della scheda SD e utilizzarlo per creare un FileOutputStream. Da lì, basta usare le routine standard java.io.

+0

Grazie Erich. Sto passando il percorso completo come una stringa come questo "/sdcard/filename.ext". anche il file è stato creato ma la dimensione del file rimane 0 byte. inoltre non sono in grado di utilizzare i controlli del file push/pull del DDMS in eclissi. –

+0

Potrebbe essere necessario inserire parte del codice di scrittura del file per aiutare a diagnosticare il problema. Non tutto, ma almeno le basi di ciò che sta accadendo. Inoltre, stai vedendo messaggi in LogCat? –

+0

Erich, ho aggiornato il codice. nessun messaggio viene creato su file ops in LogCat. Ho cambiato codice per un sacco di volte che ho ricevuto degli errori in qualche codice ma non ricordo quale codice mi ha dato degli errori. –

3

Ecco un esempio:

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

INSIEME A QUESTO anche scrivere questa autorizzazione IN Android.Manifest

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

questo è ciò che chiamiamo la vista di un programmatore –

+0

qui invece di edittext vorrei passare due valori di stringa e memorizzarli in un file in sdcard. Come posso ottenerlo? – AndroidOptimist

+0

@Alliswell Si prega di seguire questo collegamento, spero che otterrete la vostra soluzione http://stackoverflow.com/questions/9962896/store-data-text-to-sd-card-in-android –