¿Cómo crear / escribir un archivo en la raíz del dispositivo Android?

Descubrí que puedes usar algo como esto para crear un archivo:

FileOutputStream fs = openFileOutput("/test.in", MODE_WORLD_WRITEABLE); String s = "[Head]\r\n"; s += "Type=2"; byte[] buffer = s.getBytes(); fs.write(buffer); fs.close(); 

Cuando ejecuto el código anterior, obtengo una IllegalArgumentException que dice:

java.lang.IllegalArgumentException: File /test.in contiene un separador de ruta

y supongo que el “/” no es apreciado. Quería el “/” porque necesito escribir el archivo en el directorio raíz del dispositivo, como se indica en la API al tratar de seguir:

Una solicitud es un archivo de texto (UNICODE) con la extensión de archivo “.in”. La aplicación lee y analiza el archivo .in cuando se coloca en el directorio raíz en el dispositivo móvil.

La pregunta es: ¿cómo coloco un archivo en el directorio raíz? He estado buscando una respuesta, pero aún no he encontrado ninguna.

Saludos

Context.openFileOutput está destinado a ser utilizado para crear archivos privados para su aplicación. van en el directorio de datos privados de tu aplicación. usted proporciona un nombre , no una ruta: “nombre El nombre del archivo para abrir; no puede contener separadores de ruta”.

http://developer.android.com/reference/android/content/Context.html#openFileOutput(java.lang.String , int)

en cuanto a su pregunta, no puede escribir en / a menos que sea root:

my-linux-box $ adb shell ls -l -d / drwxr-xr-x root root 2010-01-16 07:42 $

No sé cuál es tu API que espera que escribas en el directorio raíz, pero supongo que no es una API de Android y estás leyendo la documentación incorrecta 😉

Puede agregar archivos con ruta en un directorio privado como ese

  String path = this.getApplicationContext().getFilesDir() + "/testDir/"; File file = new File(path); file.mkdirs(); path += "testlab.txt"; OutputStream myOutput; try { myOutput = new BufferedOutputStream(new FileOutputStream(path,true)); write(myOutput, new String("TEST").getBytes()); myOutput.flush(); myOutput.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } 

Hoy enfrenté el mismo problema

java.lang.IllegalArgumentException: File /test.txt contiene un separador de ruta

y cuando probé lo siguiente, funcionó.

  File inputFile = new File("/storage/new/test.txt"); FileInputStream isr = new FileInputStream(inputFile); DataInputStream in = new DataInputStream(isr); if(!inputFile.exists()){ Log.v("FILE","InputFile not available"); } else { while((line = in.readLine()) != null) { ........ //parse } } 

(Por cierto, estaba obteniendo este problema fuera / directorio raíz y mientras buscaba vi esta publicación)