2017-11-17 4 views
0

パスワードとユーザー名を2つの別々のファイル(それに応じて)に設定して保存できるログインプログラムをコーディングしています。私の問題は、ユーザー名をパスワードに設定する方法を理解できないことです。例:ユーザ名はBob、パスワードはcat、ユーザ名はBob、パスワードはcatと入力する必要があります。そうしないとエラーが発生します(ユーザがbillとしてユーザ名を入力し、パスワードをcatとして入力すると、ユーザー名はそれぞれのパスワードではありません)。どんな助けもいいだろう。 *私はまだパスワード部分と同じ構造であるため、ユーザー名部分を追加していません。パスワードに対応するユーザー名が必要です。JAVAユーザー名とログイン用のパスワードを一致させる

ここは私です私は参考のために、これまで持っているコード:

import java.io.File; 
import java.io.PrintStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
import java.io.FileReader; 
import java.io.*; 
import java.util.*; 
import javax.swing.JOptionPane; 
public class PassCode 
{ 
    static String adminPassword = "Change Password"; 
    public static void fileMaker() throws IOException 
    { 
     PrintStream standard = System.out; 
     File f = new File("Password.txt"); 
     FileOutputStream fs= new FileOutputStream(f); 
     PrintStream ps = new PrintStream(fs); 
     System.setOut(ps); 
     String theMessage = "Set New Password"; 
     String userInput = JOptionPane.showInputDialog(theMessage); 
     System.out.println(userInput); 
     ps.close(); 
     System.setOut(standard); 
    } 
public static void Checker() throws IOException 
    { 
     Scanner inputStream = new Scanner(new FileReader("Password.txt")); //Scans declared file for text on the first line 
     String fileChecker = inputStream.nextLine(); //Sets scanned line into a string variable 
     if(fileChecker.isEmpty()) 
     { 
      fileMaker(); 
     } 
     else 
     { 
     int reply = JOptionPane.showConfirmDialog(null, "Would you like to change the current password", "Warning!", JOptionPane.YES_NO_OPTION); 
     if (reply == JOptionPane.YES_OPTION) 
      { 
       String inquire = "Type Administrator Password to Proceed"; 
       boolean flag = true; 
       while(flag == true) 
      { 
       String confirm = JOptionPane.showInputDialog(inquire); 
      if(confirm.equals(adminPassword)) 
      { 
       fileMaker(); 
       flag = false; 
      } 
      else 
      { 
       inquire = "Incorrect!" + "\n" + "Retry"; 
      } 
      } 
     } 
     } 
    } 
    public static void main(String[] args) throws IOException 
    { 
     Checker(); 
     Scanner inputStreamThree = new Scanner(new FileReader("Password.txt")); 
     String line = inputStreamThree.nextLine(); 
     String question = "Password Please"; 
     Boolean right = true; 
     while(right == true) 
     { 
      String ask = JOptionPane.showInputDialog(question); //Asks for user to input password 
     if(ask.equals(adminPassword)) //Checks if user input the admin password 
     { 
      fileMaker(); 
      Scanner inputStreamAdmin = new Scanner(new FileReader("Password.txt")); //Scans for admin password 
      String adminChecker = inputStreamAdmin.nextLine(); //Sets scanned line as a new string variable 
      line = adminChecker; 
     } 
     else if(line.equals(ask)) //Checks if user password is correct 
     { 
      System.out.println("Welcome Fellow Programmer to the Now Functioning Password Checker!" + 
       "\n" + "Date Today: 10/31/2017" + 
       "\n\n\n\n\n\n\n" + "Did you figure out the Admin password yet?"); 
      right = false; 
     } 
     else if(ask != line) //Checks if user password is incorrect 
      { 
       question = "Incorrect Password!"; 
      } 
     } 
    } 
} 
+0

は、2つの異なるファイルの要求をしていますか? –

+0

それが好ましいですが、それのまわりに別の方法があるなら、それはうまくいくでしょう。また、2つの異なるファイルを使用して、パスワードとユーザー名の両方を別々に保管したいと考えました。 –

答えて

0

両方のユーザ名とパスワードは、それぞれのファイルの同じ行番号に配置されている場合は、与えられたユーザーに対して正しいパスワードを控除することができるはずです。

例:

Username.txt      Password.txt 
bob        cat 
alice        rabbit 
victor        salmon 

ユーザ名を検索、ユーザー名を見つけるまで読んでラインを数えます。次に、パスワードファイルで、行数を読み取り、パスワード値を取得します。次に比較する!

パスワードをファイルに保存することは大きなセキュリティ上の問題であり、プロのプロジェクトでは許可しないでください。

+0

私はそれを試みます!それは私が探している答えになるようです。 P.S.これは学問的な仕事ですが、基本的なログインプログラムの機能を理解し、それに基づいて最適化する簡単なプログラムを作りたがっています(これは教えるプログラムとして非常に明白です)。 –

0

私はあなたが1つのログインのみを使用すると仮定しますが、2つのファイルPassword.txtとUsername.txtに格納します。

以下は私の10分のコードなので、タイプミスやエラーがあれば修正する必要があります。あなたがその両方のファイルで複数のログイン資格情報を持っていた場合

import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.util.Scanner; 

import javax.swing.JOptionPane; 

public class PassCodeA { 

    public static void main(String[] args) 
    { 
     Scanner usernameFile = null; 
     try { 
      usernameFile = new Scanner(new FileReader("Username.txt")); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      JOptionPane.showMessageDialog(null, "Username File Missing", "File Missing", JOptionPane.CLOSED_OPTION); 
      return; 
     } 

     Scanner passwordFile = null; 
     try { 
      passwordFile = new Scanner(new FileReader("Password.txt")); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      JOptionPane.showMessageDialog(null, "Password File Missing", "File Missing", JOptionPane.CLOSED_OPTION); 
      return; 
     } 

     String usernameInput = JOptionPane.showInputDialog(null,"Please Enter Username", "Username", JOptionPane.OK_CANCEL_OPTION); 
     String passwordInput = JOptionPane.showInputDialog(null,"Please Enter Password", "Username", JOptionPane.OK_CANCEL_OPTION); 
     System.out.println(usernameInput); 

     boolean usernameFound = false; 
     while(usernameFile.hasNextLine()){ 
      final String lineFromFile = usernameFile.nextLine(); 
      if(lineFromFile.equals(usernameInput)){ 
       usernameFound = true; 
       break; 
      } 
     } 
     if (usernameFound == false) { 
      JOptionPane.showMessageDialog(null, "Username not found", "Username Not Found", JOptionPane.CLOSED_OPTION); 
      return; 
     } 

     boolean passwordFound = false; 
     while(passwordFile.hasNextLine()){ 
      final String lineFromFile = passwordFile.nextLine(); 
      if(lineFromFile.equals(passwordInput)){ 
       passwordFound = true; 
       break; 
      } 
     } 

     if (passwordFound == false) { 
      JOptionPane.showMessageDialog(null, "Password not found", "Password Not Found", JOptionPane.CLOSED_OPTION); 
      return; 
     } 

     JOptionPane.showMessageDialog(null, "Thank you for login", "Success", JOptionPane.CLOSED_OPTION); 


    } 



} 

。スキャナの代わりにLineNumberReaderを使用する必要があります。両方のファイルの行番号と一致させることができます。

+0

明日も試してみて、結果がどうなるか見てみましょう。あなたのご意見ありがとうございます。 –

0

LineNumberReader(LNR)を実装し、ユーザー名とパスワードの両方の行番号が同じであるかどうかを確認する方法を見つけました。私は別の方法を使用し、それをメインメソッドで呼び出しました。私はコードをテストし、両方のファイルで複数のユーザー名とパスワード情報を使って作業しました。私はこれも乱雑であることを知っていますが、私はまず機能性を目指していました。それに応じて最適化します。私はコード全体をアップロードすることはできません。ここで

は、私が追加されたコード(LNRを持つだけの方法)は、次のとおりです。

public static void reader() throws IOException 
    { 
     JTextField username = new JTextField(); 
     JTextField password = new JPasswordField(); 
     Object[] message = { 
      "Username:", username, 
      "Password:", password 
      }; 

     int option = JOptionPane.showConfirmDialog(null, message, "Login", JOptionPane.OK_CANCEL_OPTION); 


     boolean right = true; 

     while(right == true) 
     { 
     int u = 0; 
     String userCheck; 
     FileReader ur = null; 
     LineNumberReader lnru = null; 

     try { 

     ur = new FileReader("username.txt"); 
     lnru = new LineNumberReader(ur); 

     while ((userCheck = lnru.readLine()) != null) 
     { 
      if (userCheck.equals(username.getText())) 
      { 
       break; 
      } 
      else 
      { 
       u = lnru.getLineNumber(); 
      } 
     } 
     } catch(Exception e) 
     { 
      e.printStackTrace(); 
     } finally { 
       if(ur!=null) 
        ur.close(); 
       if(lnru!=null) 
        lnru.close(); 
      } 

     int p = 0; 
     String passCheck; 
     FileReader pr = null; 
     LineNumberReader lnrp = null; 

     try { 

     pr = new FileReader("Password.txt"); 
     lnrp = new LineNumberReader(pr); 

     while ((passCheck = lnrp.readLine()) != null) 
     { 
      if (passCheck.equals(password.getText())) 
      { 
       break; 
      } 
      else 
      { 
       p = lnrp.getLineNumber(); 
      } 
     } 
    } catch(Exception e) 
     { 
      e.printStackTrace(); 
     } finally { 

      if(pr!=null) 
       pr.close(); 
      if(lnrp!=null) 
       lnrp.close(); 
     } 

     if (option == JOptionPane.OK_OPTION) 
     { 
     if(password.getText().equals(adminPassword)) //Checks if user input the admin password 
     { 
      passMaker(); 
      Scanner inputStreamAdmin = new Scanner(new FileReader("Password.txt")); //Scans for admin password 
      String adminChecker = inputStreamAdmin.nextLine(); //Sets scanned line as a new string variable 
      //lineFromFile = adminChecker; 
     } 
     else if(p == u) //Checks if username and password are correct 
     { 
      System.out.println("Welcome Fellow Programmer to the Now Functioning login program!" + "\n" + "Date Today: 10/31/2017" + "\n\n\n\n\n\n\n" + "Did you figure out the Admin password yet?"); 
      right = false; 
     } 
     else //Checks if user password is incorrect 
      { 
       option = JOptionPane.showConfirmDialog(null, message, "Login Failed Try Again", JOptionPane.OK_CANCEL_OPTION); 
      } 
     } 
    } 
    } 
関連する問題