我正试图为我的Ap comp项目制作一个更小版本的Passwords (https://haveibeenpwned.com/Passwords)。除了两件事外,一切都很好:
(问题1) (为了更好地展示我的代码),我的jForm源代码下面有这个,它声明了每个按钮/等等以及它们所做的事情。但是,我得到了这个错误:“内部类PassCheck.check中的非法静态声明。我现在不知道如何解决这个问题。
第二个问题是使用FileReader和缓冲阅读器。我希望程序读取从jForm输入的文本,并将其与具有常用密码列表的文件进行比较。我该怎么做?到目前为止,我只使用FR和BR的代码如下:
import java.io.*;
public class MainFileReader {
public static void main(String[] args) throws Exception{
String refpass, input;
input = "1234";
FileReader fr = new FileReader("C:\\Users\\tcoley\\Downloads\\207pass.txt");
BufferedReader br = new BufferedReader(fr);
while((input = br.readLine()) != null){
refpass = br.readLine();我在这里停了下来。我道歉,因为Java不是我的强项,但是任何帮助都是非常感谢的!
发布于 2022-04-08 00:01:27
对于您的问题#2,- input是要使用的字符串变量,保存您希望在文件中找到的密码,但是当您将其应用于读取一行:(input = br.readLine())时,会删除它的内容。它现在将保持当前读取的文件行(这是不好的)。您需要使用refPass变量,例如:(refPass = br.readLine())。
您只需要在循环中使用br.readLine()一次。您的代码现在有效的操作(如果它运行的话)是在while循环的每个迭代中读取两(2)行文件行。它可能会陷入异常,因为在第二次读取中没有对null的保护。再说一次没什么好处。
一旦你读了一个文件行,确保它确实包含了一些东西。很多时候,一个文件中会有一个空白行,如果不处理的话,它可以把猴子扳手扔进东西里。要检查这一点,您可以执行如下所示的操作,在之后,将一行读入refPass
while((refPass = br.readLine()) != null) {
// remove leading & trailing whitespaces (if any).
refPass = refPass.trim();
// Skip past blank lines in file (if any).
if (refPass.isEmpty()) {
continue;
}
// .... rest of code ...
}现在,要完成循环块代码,只需将读取的密码与input变量(例如:"1234")中包含的密码进行比较。要做到这一点,你可以拥有这样的东西:
if (refPass.equals(input) {
System.out.println("Password Found!")
break; // Break out of the 'while' loop and close file.
}方面:不使用==来比较字符串的content等式,这可能并不总是像您预期的那样工作。使用String#equals()方法代替。读取所提供的链接。
在while循环的末尾和外部,确保关闭读取器,例如:br.close();,以便释放文件并释放资源。
发布于 2022-04-07 18:12:21
您不需要使用BufferedReader。缓冲只适用于低效率的读写(即多次读写)
使用Path和Files代替
Path p = "C:\\Users\\tcoley\\Downloads\\207pass.txt";
String file = new String(Files.loadAllBytes(p));发布于 2022-04-07 18:13:04
文件是什么样子的?有很多方式来格式化文件,为了简单起见,这只是假设每一行只有一个字:
带着线
refpass = br.readLine();您正在从文件中获取行。
boolean isEqual = refpas.equals(input);这使您可以单独评估线路。记住,'==‘不是在Java中使用字符串比较的方式。
("cat" == "cat") != ("cat".equals("cat"))https://stackoverflow.com/questions/71786508
复制相似问题