81 votes

java.lang.IllegalArgumentException : contient un séparateur de chemin

J'ai un nom de fichier dans mon code comme :

 String NAME_OF_FILE="//sdcard//imageq.png";
FileInputStream fis =this.openFileInput(NAME_OF_FILE); // 2nd line

J'obtiens une erreur sur la 2ème ligne :

05-11 16:49:06.355: ERROR/AndroidRuntime(4570): Causé par: java.lang.IllegalArgumentException: File //sdcard//imageq.png contient un séparateur de chemin

J'ai aussi essayé ce format :

 String NAME_OF_FILE="/sdcard/imageq.png";

85voto

runix Points 31

La solution est :

 FileInputStream fis = new FileInputStream (new File(NAME_OF_FILE));  // 2nd line

La méthode openFileInput n'accepte pas les séparateurs de chemin.

N'oubliez pas de

 fis.close();

à la fin.

60voto

Stephan Points 4003

Cette méthode ouvre un fichier dans la zone de données privées de l'application. Vous ne pouvez pas ouvrir de fichiers dans des sous-répertoires de cette zone ou d'autres zones à l'aide de cette méthode. Utilisez donc le constructeur du FileInputStream directement pour passer le chemin avec un répertoire dedans.

33voto

reflog Points 4994

openFileInput() n'accepte pas les chemins, seulement un nom de fichier si vous souhaitez accéder à un chemin, utilisez File file = new File(path) et FileInputStream

3voto

Swaran Gõdlã Points 99

J'ai reçu le message d'erreur ci-dessus en essayant d'accéder à un fichier à partir du stockage interne à l'aide de la méthode openFileInput("/Dir/data.txt") avec le sous-répertoire Dir .

Vous ne pouvez pas accéder aux sous-répertoires en utilisant la méthode ci-dessus.

Essayez quelque chose comme :

 FileInputStream fIS = new FileInputStream (new File("/Dir/data.txt"));

2voto

user1389698 Points 59

Vous ne pouvez pas utiliser directement le chemin avec des séparateurs de répertoire, mais vous devez créer un objet fichier pour chaque répertoire.

REMARQUE : ce code crée des répertoires, le vôtre n'en aura peut-être pas besoin...

 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);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X