2011-12-17 4 views
-1

Je veux de l'aide moi-même, j'ai fait un fichier qui créerait un fichier utilisateur, car je prévois de faire un jeu. Il a un login qui écrit le nom de connexion, le nom d'affichage et le mot de passe. Il l'écrit dans un fichier nommé après le nom de connexion.Java Comment lire une ligne spécifique

Maintenant, je souhaite faire un script de connexion, en utilisant java. Je veux savoir, spécifiquement, comment lire la ligne et le mot de passe déjà entré. Je l'ai pour que quand il crée le fichier, il enregistre le mot de passe deux fois, une fois comme "playerPass" et une fois comme "currPass" de sorte que, si on prévoyait de changer le mot de passe (que j'utiliserai du login script), alors le currPass serait lu comme le mot de passe correct en utilisant la variable playerPass. Quoi qu'il en soit, je voudrais utiliser BufferedReader et FileReader pour lire la ligne indiquant le mot de passe et le mot de passe actuel afin que quelqu'un puisse se connecter.

Quelqu'un peut-il m'aider beaucoup avec cela? Je suis encore, jusqu'à un certain point, novice.

PS. Je peux modifier le code, j'ai juste besoin d'une petite explication sur comment le coder lol.

Variables:

playerLogName 
playerName 
playerPass 
currPass 

noms de fichier:

Login.java 
CharacterFileCreator.java 

MADE UN AJOUT, a fonctionner la moitié, mais il se verrouille en place (en utilisant le Dr Java) après avoir entrer le mot de passe, peu importe ce que Je fais, incorrect ou correct, et le System.out.println() ne s'exécute jamais, même si le mot de passe est incorrect. Check it:

import java.util.Scanner; 
import java.io.BufferedWriter; 
import java.io.BufferedReader; 
import java.io.FileWriter; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.FileNotFoundException; 

class Login { 

    public static void LogIn(){ 
    boolean loggedIn = false; 
    loggedIn = true; 
    System.out.println("You are now logged in!"); 
    } 

    public static void main(String[] args) { 
    System.out.println("What is your login name?"); 
    Scanner charLogName = new Scanner(System.in); 
    String playerLogName = charLogName.nextLine(); 
    boolean charFileFound = false; 
    BufferedReader characterfile = null; 

    try { 
     characterfile = new BufferedReader(new FileReader("./game/characters/" + playerLogName + ".txt")); 
     charFileFound = true; 
    } 
    catch (FileNotFoundException fileex1) {} 
    if(charFileFound == false){ 
     System.out.println("Login name does not exist!"); 
    } 
    else 
    { 
     System.out.println(playerLogName + ": is your username, what is your password?"); 
     Scanner charPassword = new Scanner(System.in); 
     String playerPass = charPassword.nextLine(); 
     String line = ""; 
     String token = ""; 
     String token2 = ""; 
     int ReadMode = 0; 
     try { 
     line = characterfile.readLine(); 
     } catch (IOException ioexception) { 
     System.out.println(playerLogName + ": error loading file."); 
     } 
     while (line != null) { 
     line = line.trim(); 
     int spot = line.indexOf("="); 
     if (spot > -1) { 
      token = line.substring(0, spot); 
      token = token.trim(); 
      token2 = line.substring(spot + 1); 
      token2 = token2.trim(); 
      switch (ReadMode) { 
      case 1: 
       if (token.equals("character-password")) { 
       if (playerPass.equals(token2)) { 
       LogIn(); 
       } else { 
       System.out.println("You entered an incorrect password!"); 
       } 
       break; 
      } 
      } 
     }   else { 
      if(line.equals("[ACCOUNT]")) { 
      ReadMode = 1; 
      } 
      else if(line.equals("[EOF]")) { 
      try { 
       characterfile.close(); 
      } catch (IOException ioexception) { 
      } 
      } 
     } 
     } 
    } 
    } 
} 

EDIT:

FICHIER EXEMPLE:

[ACCOUNT] 
character-loginname = SampleFile 
character-password = samplepassword 
[EOF] 
+0

Afficher un exemple de fichier dans votre question. –

+1

* "Désolé les gars, c'est 4:15 ici haha." * Pas une excuse valable. Si vous êtes mis dans une position où vous devez donner des excuses pour une mauvaise question, c'est un bon signe que vous ne devriez pas poser la question, ou vous devriez retarder la question jusqu'à ce que vous soyez apte à le faire. -1 –

+0

Im 17, im encore un gamin, j'ai une excellente "excuse", et cette "excuse" était pour le "brainfart" que j'avais! Wasnt pour rien d'autre, je suis nouveau à cela, et j'ai besoin d'aide, le point de poser des questions, est d'obtenir de l'aide, si vous ne savez pas quelque chose, vous n'avez pas, je cherchais depuis un certain temps, bien, quelques heures, mais je ne vais pas m'asseoir pendant 12 heures regardant sur la façon de réparer quelque chose comme ça. ** Et oui, être debout pendant 34 heures d'affilée est une excuse valable, merci beaucoup. – Daniel

Répondre

0

Il serait probablement plus facile d'utiliser un fichier de propriétés! Vous pouvez toujours lui donner n'importe quelle extension de fichier et même la chiffrer si vous le souhaitez, mais en utilisant l'objet Properties, vous pouvez obtenir ou définir n'importe quelle propriété quel que soit le numéro de ligne!

Regardez ici pour un exemple: http://www.exampledepot.com/egs/java.util/Props.html

MISE À JOUR: Je repéré votre problème - vous ne lisez la ligne suivante du fichier dans votre boucle while, vous trouverez probablement que si vous mettez System.out.println(line); quelque part à l'intérieur de la boucle il continuerait à afficher "[ACCOUNT]" - la première ligne de votre fichier!

Pour résoudre ce problème, je pourrais être enclin à mettre toute la boucle dans une instruction trycatch et changer la condition à while((line = characterfile.readLine()) != null). De cette façon, chaque boucle utilise la ligne suivante, mais cela pourrait poser problème en termes d'interception d'exceptions, selon la situation.

Sinon, vous pouvez ajouter line = characterfile.readLine(); après avoir défini ReadMode-1 dans votre déclaration if(line.equals("[ACCOUNT]")), et comme instruction else lors du test if (token.equals("character-password")) ....

Cependant, si vous suivez mes conseils et utiliser le fichier Properties Vous ne serez pas obligé de faire une boucle pour obtenir les données de caractères que vous pouvez simplement appeler quelque chose comme password = propertyObject.getyProperty("password") comme le montre l'exemple de lien.

HTH

+0

Andy, je vais vérifier cela, mais je voudrais toujours une solution à mon problème actuel avant que je le fasse, je d'autre part, je n'apprends pas des erreurs que j'ai déjà faites, j'apprends juste de nouvelles choses pour éviter les erreurs . Il y a quelque temps, j'avais fait des expériences sur un serveur privé RuneScape non-hébergé et non-hébergé, juste pour une petite expérience de codage, merci pour l'aide. – Daniel

+0

Je ne peux pas vraiment vous aider sur une solution à votre problème actuel avec les informations que vous avez fournies malheureusement. Votre code me semble correct, bien que je me demande ce que vous entendez par "verrouiller", car votre code ne semble pas faire beaucoup après que le mot de passe a été vérifié - si vous obtenez le mot de passe erroné, le System.out. println() 'line execute, ou recevez-vous des exceptions/erreurs n'importe où? – Andy

+0

non il n'y a rien après ça, ça gèle juste, j'ai attendu et rien ne se passe, je dois juste le recompiler pour qu'il cesse d'essayer de faire tout ce qu'il fait qui le verrouille. – Daniel

Questions connexes