2010-09-02 12 views
24

Estoy tratando de usar la función openFileOutput pero no quiere compilar ... no reconoce la función. Estoy usando Android SDK 1.6. ¿Es esto un problema de SDK? ¿Es esto un problema de parámetro?android ¿qué hay de malo con openFileOutput?

import java.io.FileOutputStream; 
public static void save(String filename, MyObjectClassArray[] theObjectAr) { 
     FileOutputStream fos; 
     try { 
      fos = openFileOutput(filename, Context.MODE_PRIVATE); 


      ObjectOutputStream oos = new ObjectOutputStream(fos); 
      oos.writeObject(theObjectAr); 
      oos.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     }catch(IOException e){ 
      e.printStackTrace(); 
     } 
    } 

Respuesta

48

Su método debe ser el siguiente. Toma un contexto adicional como parámetro. Para este método se puede pasar su servicio o actividad

public static void save(String filename, MyObjectClassArray[] theObjectAr, 
    Context ctx) { 
     FileOutputStream fos; 
     try { 
      fos = ctx.openFileOutput(filename, Context.MODE_PRIVATE); 


      ObjectOutputStream oos = new ObjectOutputStream(fos); 
      oos.writeObject(theObjectAr); 
      oos.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     }catch(IOException e){ 
      e.printStackTrace(); 
     } 
    } 
+0

gracias, esto es todo. – Fabien

+0

No pude hacer que esto funcione. Probé un contexto pasado, 'context.getApplicationContext()', 'Application.instance()' y 'Application.instance(). GetApplicationContext()' para la ctx aquí y siempre arroja FileNotFoundException. –

+2

Resulta que tuve un problema con los permisos. Definitivamente no es obvio que un problema de "Permiso denegado" da como resultado una 'FileNotFoundException'. –

4

Usted está tratando de invocar el método no estático del contexto estático (método tiene su modificador static). O bien debe hacer que su método sea no estático o pasarlo en una instancia de Contexto (instancia de actividad en la mayoría de los casos) e invocar el método en el objeto.

+0

Gracias he encontrado a cabo también este problema. :) – Fabien

1

también que no se puede openOutputStream en un camino. Hace que esta excepción:

java.lang.IllegalArgumentException: File /storage/sdcard0/path/to/file.txt contains a path separator 

Para solucionar este problema, es necesario crear un objeto de archivo y simplemente crear de esta manera:

String filename = "/sdcard/path/to/file.txt"; 
File sdCard = Environment.getExternalStorageDirectory(); 
filename = filename.replace("/sdcard", sdCard.getAbsolutePath()); 
File tempFile = new File(filename); 
try 
{ 
    FileOutputStream fOut = new FileOutputStream(tempFile); 
    // fOut.write(); 
    // fOut.getChannel(); 
    // etc... 
    fOut.close(); 
}catch (Exception e) 
{ 
    Log.w(TAG, "FileOutputStream exception: - " + e.toString()); 
} 
Cuestiones relacionadas