如何读取Java中的数字密码?
我试图让用户输入一个四位数的pin码,但我不希望在他们键入pin码时将其打印在屏幕上。我试过使用如何读取Java中的数字密码?,java,java.util.scanner,password-protection,Java,Java.util.scanner,Password Protection,我试图让用户输入一个四位数的pin码,但我不希望在他们键入pin码时将其打印在屏幕上。我试过使用System.console().readPassword()像这样: import java.util.Scanner; import java.io.*; import java.util.InputMismatchException; public class VirtualATM{ private static String Details; public static v
System.console().readPassword()代码>像这样:
import java.util.Scanner;
import java.io.*;
import java.util.InputMismatchException;
public class VirtualATM{
private static String Details;
public static void main(String [] args){
try{
//Create variables & scanner to be used throughout the program.
Scanner sc = new Scanner(System.in);
boolean RegisterOrExist = false;
int cardNo = 0;
String DirToWriteFile = System.getProperty("user.dir") + "/VirtualATM.txt"; //Get path to write text file to.
DirToWriteFile.trim();
File file = new File(DirToWriteFile);
// if file doesn't exists, then create it
if (!file.exists()) {
file.createNewFile();
}
//Create writer to write to files.
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
System.out.println("Enter card number, or type register to register a new card.");
String register = sc.nextLine();
if(register.equalsIgnoreCase("register")){
RegisterOrExist = false;
RegisterNewCard();
} else {
RegisterOrExist = true;
cardNo = Integer.valueOf(register);
}
bw.write(Details);
//Close the writer.
bw.close();
} catch(IOException e) {
e.printStackTrace();
}
}
/*** Method for registering a new card **/
public static void RegisterNewCard(){
Scanner sc = new Scanner(System.in);
System.out.print("Name: ");
String name = sc.nextLine();
int MaxVal = Integer.MAX_VALUE;
int CardNo = new java.util.Random().nextInt(MaxVal) + 1;
int balance = new java.util.Random().nextInt(10000) + 1;
boolean OverDraft = false;
int OverDraftLimit = 0;
if(OverDraft = true){
OverDraftLimit = 250;
}
char [] PIN = {};
System.out.println("Create a FOUR digit pin: ");
try{
PIN = System.console().readPassword();
}catch(InputMismatchException e){
e.printStackTrace();
}
int P1 = (int) PIN[0];
int P2 = (int) PIN[1];
int P3 = (int) PIN[2];
int P4 = (int) PIN[3];
int [] PinNo = {P1, P2, P3, P4};
Details = "Name: " + name + " CardNo: " + CardNo + " Current Balance: " + balance + " overdraft? " + OverDraft + " OverDraftLimit: " + OverDraftLimit + " pin: " + PinNo;
}
}
然后,我尝试使用BufferedWriter
将pinint[]pinNo={P1,P2,P3,P4}
写入文本文件。当我将pin作为2566
输入时,我在文本文件中得到以下文本:
[I@42a57993
有没有其他方法可以在用户键入密码时不在屏幕上打印而读取密码?如果您试图在Eclipse IDE控制台上运行代码,那么它将不起作用。这是一个错误
您需要从命令提示符或终端等运行
欲了解更多信息,请参阅以下帖子:-
如果您试图在EclipseIDE控制台上运行代码,那么它将不起作用。这是一个bug
您需要从命令提示符或终端等运行
欲了解更多信息,请参阅以下帖子:-
问题:
pin: " + PinNo;
实际上,您正在打印数组对象的内存位置
,而不是数组元素本身
解决方案:
pin: " + PinNo;
您可以获取PinNo
数组的每个索引,并将它们附加到字符串中
"pin: " + PinNo[0] + PinNo[1] + PinNo[2] + PinNo[3]
问题:
pin: " + PinNo;
实际上,您正在打印数组对象的内存位置
,而不是数组元素本身
解决方案:
pin: " + PinNo;
您可以获取PinNo
数组的每个索引,并将它们附加到字符串中
"pin: " + PinNo[0] + PinNo[1] + PinNo[2] + PinNo[3]
嗯,这条线
bw.write(Details);
正在将详细信息
写入
Details = "..otherdetails..."+"pin: " + PinNo;
显示您正在写入数组的散列。因此只需将“pin:+PinNo
替换为
数组的实际元素
你可以简单地按照罗德说的去做,或者试试这个
Details = "..otherdetails..."+"pin: " + java.util.Arrays.toString(PinNo)
提示-使用此选项可使您的密码更安全
像这样试试
char[] PIN = System.console.readPassword();
Arrays.fill(password, ' ');
嗯,这条线
bw.write(Details);
正在将详细信息
写入
Details = "..otherdetails..."+"pin: " + PinNo;
显示您正在写入数组的散列。因此只需将“pin:+PinNo
替换为
数组的实际元素
你可以简单地按照罗德说的去做,或者试试这个
Details = "..otherdetails..."+"pin: " + java.util.Arrays.toString(PinNo)
提示-使用此选项可使您的密码更安全
像这样试试
char[] PIN = System.console.readPassword();
Arrays.fill(password, ' ');
[I@42a57993
是数组(对象)的散列。显示BufferedWriter部分可能的重复项运行此代码时,是否只有我一个人出现InputMisch异常?int P1=(int)PIN[0];
正在将char
转换为int
,这不是您想要的。[I@42a57993
是数组(对象)的哈希.show the BufferedWriter Part的可能重复项运行此代码时,是否只有我一个人出现InputMisch异常?int P1=(int)PIN[0];
正在将char
转换为int
,这不是您想要的。什么是数组。填充(密码“”);
do?它将用空格覆盖数组中的任何值什么是数组。填充(密码“”);
do?它将用空格覆盖数组中的任何值