Java Как читать определенную строку - PullRequest
0 голосов
/ 17 декабря 2011

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

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

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

Может ли кто-нибудь мне помочь с этим? Я все еще в какой-то степени новичок.

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

Переменные:

playerLogName
playerName
playerPass
currPass

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

Login.java
CharacterFileCreator.java

СДЕЛАНО ДОПОЛНЕНИЕ, он наполовину работает, но он блокируется (используя Dr.Web) после ввода пароля независимо от того, что я делаю, неверный или правильный, и 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:

ОБРАЗЕЦ ФАЙЛА:

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

1 Ответ

0 голосов
/ 17 декабря 2011

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

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

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

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

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

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

НТН

...