2012-10-14 4 views
0

J'essaie d'écrire du code pour importer tous les caractères (y compris les espaces) d'un fichier texte donné dans une seule chaîne pour analyse. J'utilise les fichiers donnés en Java pour cela, et j'ai couru à travers une erreur étrange tout en l'assemblant. Je ne suis pas du tout familier avec le codage, et j'aimerais avoir des précisions. Qu'est-ce qui se passe est que dans le code ci-dessous, lorsque je l'ai définiAjout de caractères à une chaîne

text.append (ch); J'ai des erreurs de constructeur par défaut ne peut pas gérer l'exception levée par X, doit définir le constructeur explicite;

et lorsque j'ai défini text.append ('ch'); Les erreurs ci-dessus disparaissent et ma ligne 'ch' donne juste un caractère char invalide. erreur, réparable en supprimant les '' s.

Donc, je suppose que je dois construire un constructeur explicite pour mes données de Java, est-ce nécessaire? Comme je n'ai aucune idée de comment le faire, ce serait bien d'avoir une solution de rond-point.

import java.io.FileInputStream; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.Reader; 
import java.lang.StringBuilder; 

public class TextReader //cannot place inputs/outputs of string on this line 
{ 

StringBuilder text = new StringBuilder(); 
//StringBuilder google 
//google end of file check java 

InputStream in = new FileInputStream("charfile.txt"); 
Reader r = new InputStreamReader(in, "US-ASCII"); 
int intch; 
{ 
while ((intch = r.read()) != -1) 
{ 
    char ch = (char) intch; 
     // ... 
    text.append(ch); //if I make this a 'ch', the errors above go away, what's the problem? 
} 
} 

} 
+0

non, ce n'est pas nessaire –

+1

Quoi? Si vous avez 'ch' cela ne devrait pas faire disparaître les erreurs. Pouvez-vous expliquer mieux? –

+0

bien si je le fais 'ch' je pense que java se concentre sur l'erreur la plus apparente. Littéralement la seule erreur dans le code lorsque ch est 'ch' est l'erreur pour 'ch' n'étant pas un caractère constant valide – Sukwoo

Répondre

0

Vous devez placer vos instructions dans un bloc de code, par ex. main méthode.

public static void main(String[] args) throws IOException { 
    StringBuilder text = new StringBuilder(); 
    // StringBuilder google 
    // google end of file check java 

    InputStream in = new FileInputStream("charfile.txt"); 
    Reader r = new InputStreamReader(in, "US-ASCII"); 
    int intch; 
    { 
     while ((intch = r.read()) != -1) { 
      char ch = (char) intch; 
      // ... 
      text.append(ch); 
     } 
    } 
} 

Les déclarations

InputStream in = new FileInputStream("charfile.txt"); 
Reader r = new InputStreamReader(in, "US-ASCII"); 

deux jet d'exceptions vérifiées qui ne peuvent pas se produire dans le bloc de classe.

+0

Uh je suppose que j'ai ignoré cela Serait-ce toujours vrai si je voulais seulement l'utiliser comme une méthode pour appeler à partir d'une autre méthode principale dans un autre fichier qui donne sur le projet entier? – Sukwoo

+0

Pas sûr que je reçoive votre question mais toutes les déclarations Les exceptions de lancement ou les déclarations non déclaratives doivent apparaître dans les blocs de code. – Reimeus

0

En fait, les E/S dans Java nécessitent un bloc try and catch, sinon cela vous donnera une erreur. De plus dans le code ci-dessus, vous devez placer la déclaration définir explicitement constructeur

TextReader() 
{ 
//----------- Your Code here. 
} 
0

Lorsque vous faites text.append(ch);, l'erreur ne doit pas venir à cette ligne. Il peut se plaindre d'un autre problème, par ex. Exceptions attendues non traitées ou jetées par ex.

manutentionnés:

try{ 
    while ((intch = r.read()) != -1){ 
     char ch = (char) intch; 
      // ... 
     text.append(ch); 
    } 
     }catch(IOException ioex){ 
      ioex.printStackTace(); 
     } 

Jetés:

Modifier votre déclaration de méthode avec throws clause comme:

public static void main(String[] args) throws IOException{ 

Quand vous dites text.append('ch');, votre argument n'est pas une variable ou seul caractère littéral tout m minerai. Vous devriez obtenir une erreur de compilation sur cette ligne. Bien que vous pouvez faire quelque chose comme text.append('c'); comme c est un seul caractère.

Questions connexes