L'objet FileInputStream ne fonctionne pas
Résolu
estrellas6
Messages postés
37
Statut
Membre
-
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 ?
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 ?
A voir également:
- L'objet FileInputStream ne fonctionne pas
- Vente objet occasion entre particulier - Guide
- Objet interdit en cabine ryanair - Guide
- Trouver objet avec photo - Guide
- Mesurer un objet - Guide
- Ce document fait l'objet d'un trop grand nombre de modifications ✓ - Forum Word
2 réponses
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 .
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 .
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 :
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é.