2011-12-17 14 views
-1

私は自分自身を助けたいと思っています。私はゲームを作ることを計画しているので、ユーザーファイルを作成するファイルを作っています。ログイン名、表示名、およびパスワードを書き込むログインがあります。それは、ログイン名の後に付けられたファイルにそれを書き出します。Java特定の行を読むには

ここで、javaを使用してログインスクリプトも作成したいと考えています。私は、具体的には、行とすでに入力されたパスワードを読み取る方法を知りたい。

ファイルを作成するときにパスワードを2回、「playerPass」と1回「currPass」で保存するようにしました。パスワードを変更する予定がある場合(ログインから使用します)スクリプト)、currPassは、playerPass変数を使用して正しいパスワードとして読み取られます。とにかく、BufferedReaderとFileReaderを使用して、パスワードと現在のパスワードを示す行を読み取ってログインできるようにしたいと考えています。

誰かがこれで私を大いに助けてくれますか?私はまだ、初心者です。

PS。私はコードを微調整することができます、私はちょっとそれを笑ってコードする方法について少し説明が必要です。

変数:

playerLogName 
playerName 
playerPass 
currPass 

ファイル名:関係なく、何の、

Login.java 
CharacterFileCreator.java 

MADE AN ADDITIONは、それは半分働いてしまったが、私は、パスワードを入力した後、それは(博士の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:

サンプルファイル:

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

質問のサンプルファイルを表示します。 –

+1

* "申し訳ありませんが、その4:15ここには笑" *有効な言い訳ではありません。あなたが貧しい質問の言い訳をしなければならないという立場に置かれているなら、それはあなたが質問してはならないという良い兆候です、そうするようになるまでそれを求めるのを遅らせるべきです。 -1 –

+0

Im 17、私はまだ子供です、私は優秀な "言い訳"を持っています、そして "言い訳"は私が持っていた "brainfart"でした!何か他のものはありませんでした。私はそれを新しくしました。私は助けが必要です。質問をすることのポイントは、助けを求めることです。あなたが何かを知っていなければ、私はしばらく修正を探していました。しかし、私はそのようなものを修正する方法を見て12時間座るつもりはありません。 **そして、はい、34時間連続していることは正当な言い訳です、ありがとうございます。 – Daniel

答えて

0

おそらく、プロパティ・ファイルを使用することが容易になるだろう!あなたが望むなら、ファイル拡張子を与えてもそれを暗号化することはできますが、Propertiesオブジェクトを使うことで、行番号に関係なく任意のプロパティを取得または設定できます!

例えばここを見て:http://www.exampledepot.com/egs/java.util/Props.html

UPDATE:私はあなたの問題を発見している - あなたはあなたのwhileループ内でのファイルの次の行を読んだことはありません、あなたはおそらく、あなたがどこかに内部System.out.println(line);を置けばことを見つけるだろうので、ループの中には、あなたのファイルの最初の行である「[アカウント]」を表示し続けるだけです!

この問題を解決するには、ループ全体をtrycatchステートメントに入れて、条件をwhile((line = characterfile.readLine()) != null)に変更することがあります。そうすれば、すべてのループで次の行が使用されますが、状況に応じて例外をキャッチするという点で問題になる可能性があります。

if (token.equals("character-password"))をテストするときに別の方法として、あなたがあなたのif(line.equals("[ACCOUNT]"))声明の中で1にReadModeを設定した後line = characterfile.readLine();を追加し、else文のように可能性が....

をしかし、あなたが私のアドバイスに従うとPropertiesファイルを使用しない場合リンクの例として、password = propertyObject.getyProperty("password")のようなものを呼び出すことができるので、文字データを取得するためにループを実行する必要はありません。

HTH

+0

Andy、私はそれをチェックしますが、私がそうする前に私の現在の問題の解決策が残っていると思います。私は既に私がした間違いから学ぶわけではありません。 。しばらくして、私は非営利のホストされていないRuneScapeプライベートサーバを実験しましたが、ちょっとしたコーディング経験のために、とにかく助けてくれてありがとうございます。 – Daniel

+0

残念なことに、あなたが提供した情報を使って、現在の問題の解決策を本当に手助けすることはできません。あなたのコードは大丈夫ですが、パスワードがチェックされた後にコードがあまり進まないように、あなたが "ロックアップ"することを意味するのは不思議ですが、パスワードが間違っていると 'System.out。 println() '行を実行するか、どこにでも例外/エラーを受け取りますか? – Andy

+0

いいえそれの後に何もない、それはちょうど凍結、私は待っていると何も起こらない、私はちょうどそれがロックアップする何をしようとすると停止するようにそれを再コンパイルする必要があります。 – Daniel

関連する問題