L'objet FileInputStream ne fonctionne pas

Résolu
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

  1. 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 .
    1. Modérateur
      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)
    2. 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 ?
    3. Modérateur
      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é.
    4. en fin le programme a compilé, c'est dans le fichier où j'ai le bin - src- .settings
      Merci beaucoup KX c'est gentil :)
    5. Modérateur
      Le dossier où tu as le bin, src, .settings, c'est ça qu'on appelle la racine du projet...
  2. Contributeur
    Hello,

    Peux-tu mettre ton code, ainsi que les messages d'erreur de compilation que tu as ?