2011-07-06 3 views
1

J'essaie d'exécuter ce code à partir du site Sun Java (je ne l'ai pas copié, regardé et écrit comme il m'aiderait à me souvenir du code).Erreur lors de la tentative de compilation du programme

import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 

public class CharEx{ 
    FileReader inputStream = null; 
     FileWriter outputStream = null; 

    public static void main(String args[]) throws IOException{ 
     FileReader inputStream = null; 
     FileWriter outputStream = null; 

     try{ 
      inputStream = FileReader("xanadu.txt"); 
      outputStream = FileWriter("out.txt"); 
      int c; 
      while ((c = inputStream.read()) != -1){ 
       outputStream(c); 
      } 
     } 
     finally{ 
      if(inputStream !=null){ 
       inputStream.close(); 
      } 
      if(outputStream !=null){ 
       outputStream.close(); 
      } 

     } 
    } 
} 

Mais je reçois une erreur follwing.

D:\Java>javac CharEx.java 
CharEx.java:14: cannot find symbol 
symbol : method FileReader(java.lang.String) 
location: class CharEx 
         inputStream = FileReader("xanadu.txt"); 
            ^
CharEx.java:15: cannot find symbol 
symbol : method FileWriter(java.lang.String) 
location: class CharEx 
         outputStream = FileWriter("out.txt"); 
            ^
CharEx.java:18: cannot find symbol 
symbol : method outputStream(int) 
location: class CharEx 
           outputStream(c); 
           ^
3 errors 

Dans le message que je pense que le système est à la recherche de l'intérieur FileReaderjava.lang alors qu'il devrait chercher à l'intérieur java.io.*: ((

quelqu'un peut me aider où je me fais mal

PS: Je suis sur JDK 1.5

+2

Je vous suggère d'essayer d'utiliser un IDE. Il vous aidera à écrire le bon code et vous donnera un retour plus rapide. –

+4

@Peter: accepté. Cependant, il y a aussi beaucoup à dire pour apprendre à compiler et faire fonctionner les choses manuellement. –

+0

Partiellement hors-sujet: J'éviterais d'appeler une variable contenant un 'Reader' quelque chose se terminant par' Stream': 'Reader' /' Writer' sont pour gérer le texte et 'InputStream' /' OutputStream' sont pour gérer les données binaires. Alors que les deux groupes peuvent être considérés comme des «flux» dans un sens général, mélanger la terminologie de cette façon peut être source de confusion. J'appellerais les variables "lecteur" et "écrivain" respectivement. –

Répondre

8

Vous essayez d'instancier un FileReader et un FileWriter (c.-à-créer des objets de ces types)

012..

Pour ce faire, vous devez utiliser le mot-clé new:

inputStream = new FileReader("xanadu.txt"); 
outputStream = new FileWriter("out.txt"); 

En laissant le new le code ressemble à un appel de méthode, de sorte que le compilateur cherche une méthode nommée FileReader (et FileWriter) et n » Je le trouve, ce qu'il vous dit dans une langue quelque peu étrange, mais étonnamment claire.

Indice: "symbole" est ce qu'un compilateur appelle un "nom". Ce nom peut être d'une classe, méthode, variables, ... Le problème exact peut être trouvé en vérifiant la ligne "symbol:". Il vous indique que le compilateur recherche une méthode appelé FileReader qui prend un paramètre String:

 
CharEx.java:14: cannot find symbol 
symbol : method FileReader(java.lang.String) 
+3

Vous devez également avoir outputStream.write (c) à la ligne 18. – bstick12

+0

Merci beaucoup Joachim & Bstick. J'ai corrigé le code. Joachim, C'est une réponse très perspicace, merci beaucoup pour votre temps. :) –

3

Il vous manque le mot-clé new lors de l'initialisation du lecteur et écrivain.

inputStream = new FileReader("xanadu.txt"); 
outputStream = new FileWriter("out.txt"); 

Vous aussi manque quelque chose sur cette ligne:

outputStream(c); 

Voulez-vous écrire dans le flux de sortie là-bas? Ensuite, vous devriez essayer ceci:

outputStream.write(c); 
+0

Merci beaucoup pour votre temps :) J'ai corrigé l'erreur :) –

Questions connexes