2011-12-17 4 views
-1

Я хочу помочь себе, я создал файл, который создал бы пользовательский файл, потому что я планирую сделать игру. У него есть логин, который записывает имя входа, отображаемое имя и пароль. Он записывает его в файл с именем имени входа.Java Как прочитать конкретную строку

Теперь я хочу создать скрипт входа, используя java. Я хочу знать, в частности, как читать строку и уже введенный пароль.

У меня есть это, так что, когда он создает файл, он дважды сохраняет пароль, как только «playerPass» и один раз «currPass», чтобы, если кто-то планировал изменить пароль (который я буду использовать из логина сценарий), то currPass будет считаться правильным паролем, используя переменную playerPass. Во всяком случае, я хотел бы, чтобы он использовал BufferedReader и FileReader для чтения строки, указывающей пароль и текущий пароль, чтобы войти в систему.

Может кто-нибудь помочь мне с этим? Я до сих пор, новичок.

PS. Я могу настроить код, мне просто нужно небольшое объяснение о том, КАК его код LOL.

Переменные:

playerLogName 
playerName 
playerPass 
currPass 

имена файлов:

Login.java 
CharacterFileCreator.java 

MADE капельной, получил это половина работает, но он блокирует (с помощью доктора Java) после того, как я ввожу пароль, независимо от того, Я делаю, неправильно или правильно, и System.out.println() никогда не выполняется, даже если пароль неверен. Проверьте это:

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:

SAMPLE FILE:

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

Показать образец файла по вашему вопросу. –

+1

* «Извините, ребята, его 4:15 здесь ха-ха». * Недействительный оправдание. Если вы поставлены в положение, что вы должны давать оправдания за плохой вопрос, это хороший признак того, что вы должны либо не задавать вопрос, либо должны задерживать его, пока вы не подойдете для этого. -1 –

+0

Im 17, им все еще ребенок, у меня отличное «оправдание», и это «оправдание» было для «мозгового» я! Не было чего-то еще, я НИЧЕГО на нем, и мне нужна помощь, нужно задать ВОПРОСЫ, чтобы ПОЛУЧИТЬ ПОМОЩЬ, если вы что-то не знаете, вы не делаете, я искал какое-то время для исправления, ну, несколько часов, но я не собираюсь сидеть в течение 12 часов, глядя на то, как исправить что-то подобное. ** И да, быть в течение 34 часов прямо, является оправданным оправданием, большое вам спасибо. – Daniel

ответ

0

Это, вероятно, будет проще использовать файл свойств! Вы все равно можете предоставить ему любое расширение файла и даже зашифровать его, если хотите, но с помощью объекта Properties вы можете получить или установить любое свойство независимо от номера строки!

Посмотрите здесь для примера: http://www.exampledepot.com/egs/java.util/Props.html

UPDATE: Я заметил вашу проблему - вы никогда не читаете следующую строку файла в вашем while цикле, так что вы, вероятно, обнаружите, что если вы поставите System.out.println(line); где-то внутри цикла он просто будет показывать «[ACCOUNT]» - первую строку вашего файла!

Чтобы решить эту проблему, я могу склонить весь цикл в операторе trycatch и изменить его состояние на while((line = characterfile.readLine()) != null). Таким образом, каждый цикл использует следующую строку, но это может быть проблематично с точки зрения обнаружения исключений, в зависимости от ситуации.

В качестве альтернативы, вы можете добавить line = characterfile.readLine(); после установки ReadMode 1 в вашем if(line.equals("[ACCOUNT]")) заявлении, и как оператор еще при тестировании if (token.equals("character-password")) ....

Однако, если вы последуете моему совету и использовать файл Properties вам не потребуется выполнять цикл, чтобы получить данные символа, так как вы можете просто вызвать что-то вроде password = propertyObject.getyProperty("password"), как показано в примере.

HTH

+0

Энди, я проверю на это, но мне все равно хотелось бы решить мою текущую проблему, прежде чем я это сделаю, также я не узнаю из ошибок, которые я уже сделал, я просто изучаю новые вещи, чтобы избежать ошибок , В то же время я экспериментировал на некоммерческом, не размещенном RuneScape Private Server, просто для небольшого опыта кодирования, во всяком случае, спасибо за помощь. – Daniel

+0

Я не могу помочь в решении вашей текущей проблемы с предоставленной вами информацией, к сожалению. Ваш код выглядит хорошо для меня, хотя я действительно задаюсь вопросом, что вы подразумеваете под «блокировкой», так как ваш код, похоже, мало что делает после того, как пароль был проверен - если вы ошиблись, пароль «System.out. println() 'line execute, или вы получаете какие-либо исключения/ошибки где-нибудь? – Andy

+0

нет ничего после него, он просто зависает, я ждал, и ничего не происходит, мне просто нужно перекомпилировать его, чтобы он не пытался делать все, что он делает, что заставляет его запираться. – Daniel

Смежные вопросы