Tengo un nombre de archivo en mi código como:
String NAME_OF_FILE="//sdcard//imageq.png";
FileInputStream fis =this.openFileInput(NAME_OF_FILE); // 2nd line
Recibo un error en la segunda línea:
05-11 16: 49: 06.355: ERROR / AndroidRuntime (4570): Causado por: java.lang.IllegalArgumentException: El archivo //sdcard//imageq.png contiene un separador de ruta
Probé este formato también:
String NAME_OF_FILE="/sdcard/imageq.png";
La solucion es:
FileInputStream fis = new FileInputStream (new File(NAME_OF_FILE)); // 2nd line
El método openFileInput no acepta separadores de ruta.
No te olvides de
fis.close();
al final.
fuente
FileInputStream
así, ¿por qué elegir usarloopenFileInput
?openFileInput()
no acepta rutas, solo un nombre de archivo si desea acceder a una ruta, useFile file = new File(path)
y correspondienteFileInputStream
fuente
Recibí el mensaje de error anterior al intentar acceder a un archivo desde el almacenamiento interno usando el
openFileInput("/Dir/data.txt")
método con subdirectorioDir
.No puede acceder a los subdirectorios utilizando el método anterior.
Prueba algo como:
FileInputStream fIS = new FileInputStream (new File("/Dir/data.txt"));
fuente
No puede usar la ruta con separadores de directorio directamente, pero tendrá que crear un objeto de archivo para cada directorio.
NOTA: Este código crea directorios, es posible que el suyo no lo necesite ...
File file= context.getFilesDir(); file.mkdir(); String[] array=filePath.split("/"); for(int t=0; t< array.length -1 ;t++) { file=new File(file,array[t]); file.mkdir(); } File f=new File(file,array[array.length-1]); RandomAccessFileOutputStream rvalue = new RandomAccessFileOutputStream(f,append);
fuente
File f = new File(fileDirPath); f.mkdirs();
EditeString all = ""; try { BufferedReader br = new BufferedReader(new FileReader(filePath)); String strLine; while ((strLine = br.readLine()) != null){ all = all + strLine; } } catch (IOException e) { Log.e("notes_err", e.getLocalizedMessage()); }
fuente
File file = context.getFilesDir(); file.mkdir(); String[] array = filePath.split("/"); for(int t = 0; t < array.length - 1; t++) { file = new File(file, array[t]); file.mkdir(); } File f = new File(file,array[array.length- 1]); RandomAccessFileOutputStream rvalue = new RandomAccessFileOutputStream(f, append);
fuente
Resolví este tipo de error creando un directorio en el evento onCreate, luego accediendo al directorio creando un nuevo objeto de archivo en un método que necesita hacer algo como guardar o recuperar un archivo en ese directorio, ¡espero que esto ayude!
public class MyClass { private String state; public File myFilename; @Override protected void onCreate(Bundle savedInstanceState) {//create your directory the user will be able to find super.onCreate(savedInstanceState); if (Environment.MEDIA_MOUNTED.equals(state)) { myFilename = new File(Environment.getExternalStorageDirectory().toString() + "/My Directory"); if (!myFilename.exists()) { myFilename.mkdirs(); } } } public void myMethod { File fileTo = new File(myFilename.toString() + "/myPic.png"); // use fileTo object to save your file in your new directory that was created in the onCreate method } }
fuente