L'objet FileInputStream ne fonctionne pas

Résolu
estrellas6 Messages postés 37 Statut Membre -  
estrellas6 Messages postés 37 Statut Membre -
Bonjour,
d'après le tutoriel de site du zéro "pour que l'objet FileInputStream fonctionne, le fichier doit exister ! "Mon problème c'est que le fichier "test.txt" existe mais le programme ne compile pas, je ne vois pas pour quoi ?

2 réponses

kij_82 Messages postés 4260 Statut Contributeur 857
 
Hello,

Peux-tu mettre ton code, ainsi que les messages d'erreur de compilation que tu as ?
0
estrellas6 Messages postés 37 Statut Membre
 
merci pour ta réponse :)

Voici le code:

package IO;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Main2 {


public static void main(String[] args) {

// Nous déclarons nos objets en dehors du bloc try/catch
FileInputStream fis = null;
FileOutputStream fos = null;

try {

// On instancie nos objets :
// fis va lire le fichier
// fos va écrire dans le nouveau !
fis = new FileInputStream(new File("test.txt"));
fos = new FileOutputStream(new File("test2.txt"));

// On crée un tableau de byte pour indiquer le nombre de bytes lus à chaque tour de boucle
byte[] buf = new byte[8];

// On crée une variable de type int pour y affecter le résultat de la lecture, Vaut -1 quand c'est fini
int n = 0;

// Tant que l'affectation dans la variable est possible,on boucle/ Lorsque la lecture du fichier est terminée l'affectation n'est plus possible !
// On sort donc de la boucle
while ((n = fis.read(buf)) >= 0) {

// On écrit dans notre deuxième fichier avec l'objet adéquat
fos.write(n);

// On affiche ce qu'a lu notre boucle au format byte et au format char
for (byte bit : buf) {
System.out.print("\t" + bit + "(" + (char) bit + ")");
System.out.println("");
}
//Nous réinitialisons le buffer à vide
//au cas où les derniers byte lus ne soient pas un multiple de 8
//Ceci permet d'avoir un buffer vierge à chaque lecture et ne pas avoir de doublon en fin de fichier

buf = new byte[8];
}
System.out.println("Copie terminée !");

}
catch (FileNotFoundException e) {

// Cette exception est levée si l'objet FileInputStream ne trouve
// aucun fichier
e.printStackTrace();

}
catch (IOException e) {

// Celle-ci se produit lors d'une erreur d'écriture ou de lecture
e.printStackTrace();

}
finally {

// On ferme nos flux de données dans un bloc finally pour s'assurer
// que ces instructions seront exécutées dans tous les cas même si
// une exception est levée !
try {

if (fis != null)
fis.close();

}
catch (IOException e) {
e.printStackTrace();
}
try {

if (fos != null)
fos.close();

}
catch (IOException e) {

e.printStackTrace();

}

}

}

}

Et voici le message d'erreur:

java.io.FileNotFoundException: test.txt (Le fichier spécifié est introuvable)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at IO.Main2.main(Main2.java:23)

Sachant que
j'ai un fichier test.txt dans la racine de mon projet Eclipse .
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Au lieu de mettre ton fichier à la racine du projet, mets le dans le répertoire bin (ou mieux : mets un chemin absolu genre C:/test.txt)
0
estrellas6 Messages postés 37 Statut Membre
 
mmmm ça n'a pas fonctionné, moi ce que j'ai pas compris est qu'est ce qu'il veut dire par "Pour que l'objet FileInputStream fonctionne, le fichier doit exister " [cette phrase est écrit dans le tutoriel] , l'existence de fichier est dans le pc ou bien où exactement ?
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Dans le classpath. En effet tu utilises une location relative, tu considères donc que tu as un répertoire courant, celui-ci est défini dans les configuration du projet (c'est Eclipse qui gère).
D'habitude Eclipse défini le répertoire courant à la racine du projet, même si par défaut c'est dans le bin qu'il est. Ici tu as peut-être une configuration particulière donc tu devrais faire un affichage du répertoire courant comme ceci :

System.out.println(new File("").getAbsolutePath());
Ton fichier test.txt devra être mis dans le dossier qui est affiché.
0
estrellas6 Messages postés 37 Statut Membre
 
en fin le programme a compilé, c'est dans le fichier où j'ai le bin - src- .settings
Merci beaucoup KX c'est gentil :)
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Le dossier où tu as le bin, src, .settings, c'est ça qu'on appelle la racine du projet...
0