2010-05-04 8 views
1

Comment puis-je modifier cette méthode d'exécution pour non seulement imprimer le srting dans la fenêtre de sortie, mais aussi écrire dans un fichier par exemple outfile.txt dans le répertoire du projet. Chaque chaîne doit également figurer sur une ligne distincte du fichier.Écrire dans un fichier java

donc j'ai déjà créé un fichier dans le répertoire du projet appelé outfile.txt

Un moment où le code est imprimé bien sur la fenêtre mais pas l'impression dans le fichier texte

est ici le code #

public void run() throws IOException 
{ 
    Scanner sc = new Scanner(System.in); 
    boolean cont = true; 
    while (cont) { 
     System.out.println("Enter text"); 
     String s = sc.nextLine(); 
     if ("*".equals(s)) { 
      cont = false; 
     } else { 
      String result = shorthand(s); 
      System.out.println(result); 
      PrintWriter pw = new PrintWriter("outfile.txt"); 
      pw.println(result); 
     } 
    } 
} 

Répondre

0

Vous ne devez pas utiliser de chemins relatifs dans java.io.File. Ils seront relatifs au répertoire de travail actuel qui dépend à son tour de la façon dont vous avez démarré l'application Java. Ce n'est peut-être pas le répertoire du projet auquel vous vous attendez. Vous devez toujours utiliser les chemins absolus dans java.io.File. Par exemple. c:/path/to/outfile.txt.

Pour en savoir où il est actuellement effectivement été écrit à, faire:

File file = new File("outfile.txt"); 
System.out.println(file.getAbsolutePath()); 

Encore une fois, ne jamais utiliser des chemins relatifs. Toujours utiliser des chemins absolus. Sinon, il suffit de le mettre dans le classpath et faire usage de ClassLoader#getResource() puis URL#toURI() puis new File(uri).

Et en effet, fermez les flux. Il videra implicitement le tampon de données dans la ressource.

+0

PrintWriter out = new PrintWriter (nouveau FileWriter ("outfilename")); out.write (résultat); out.close(); Mais ne semble toujours pas fonctionner, j'ai essayé le chemin complet de l'endroit où le fichier est également. Toutes les idées – luvthug

6

Une fois que vous avez fini d'écrire, vous devez fermer le fichier ouvert:

pw.Close(); 
+0

PrintWriter out = new PrintWriter (nouveau FileWriter ("outfilename")); out.write (résultat); out.close(); Mais ne semble toujours pas fonctionner, j'ai essayé le chemin complet de l'endroit où le fichier est également. Des idées – luvthug

+0

Qu'est-ce que vous voyez? Je voudrais que vous voyiez seulement la ligne _last_, car vous écrasez le fichier chaque fois que vous passez par la boucle. – Oded

+0

Non le fichier texte est vide rien n'est en cours init – luvthug

1

Il suffit de prendre un coup d'oeil exampledot.

+3

Nous aimons voir _answers_ ici, pas de liens. – Oded

+1

PrintWriter out = new PrintWriter (nouveau FileWriter ("outfilename")); out.write (résultat); out.close(); Mais ne semble toujours pas fonctionner, j'ai essayé le chemin complet de l'endroit où le fichier est également. Toutes les idées – luvthug

0

Vous créez un nouvel éditeur à chaque fois. Envisager de le faire avant la boucle, en tant que tel

PrintWriter pw = new... 
while(cond) { 
    ... 
    pw.println(...); 
    pw.flush(); // do this too, it does the actual writing 
} 
pw.close(); 
+0

pas de chance. En gros, la question demande ce qui suit: Modifiez la méthode d'exécution de sorte que la chaîne comprimée soit non seulement imprimée dans la fenêtre de sortie, mais aussi écrite dans un fichier appelé outfile.txt dans le répertoire du projet. Chaque chaîne compressée doit figurer sur une ligne distincte du fichier. Lorsque * entré le code devrait se terminer mais * ne devrait pas être écrit dans le fichier – luvthug

+0

Voici ce que je reçois lorsque je copie votre code et apporter mes modifications -> le code http://pastebin.com/LmP55aZU ne fonctionne pas pour vous? – corsiKa