我正在做一个从2个文本文件读取的gui登录。用户名行与密码中的行相同。如果用户名在第3行中,则密码将在password.txt中的第3行中。如果用户名和密码与username.txt和password.txt中的值匹配,系统将登录您。我可以从中获取特定的行号用户名文本,但是当读取password.txt时,我一直为空。
我尝试使用扫描仪,但是我不需要阅读每一行。我只需要阅读特定行即可。
private class ButtonHandler implements ActionListener
{
public void actionPerformed (ActionEvent event)
{
try {
File f1=new File("username.txt");
File f2=new File ("password.txt");
String[] words=null;
FileReader fr1 = new FileReader(f1);
FileReader fr2 = new FileReader(f2);
BufferedReader br1 = new BufferedReader(fr1);
BufferedReader br2 = new BufferedReader(fr2);
String s;
String user = username.getText();
String pass=String.valueOf(password.getPassword());
String usertxt = " ";
String passtxt=" ";
int count =0;
while((s=br1.readLine())!=null) //Reading Content from the file
{
words=s.split(" "); //Split the word using space
for (String word : words)
{
if (word.equals(user)) //Search for the given word
{
System.out.print(count);
for (int i = 0; i < count; i++)
{
br2.readLine();
passtxt = br2.readLine();
}
System.out.print(passtxt);
if(pass.equals(passtxt))
JOptionPane.showMessageDialog(null,"User has logged in");
}
}
count++;
}
}
catch (IOException e)
{
System.out.println("Uh oh, got an IOException error!");
e.printStackTrace();
}
}
}
我希望字符串传递为等于passtxt。
答案 0 :(得分:0)
如果您知道行的哪个字节位置,则可以使用RandomAccessFile并在文件中寻找该位置。
RandomAccessFile方法的文档(寻求帮助)使您可以将读取指针准确地放置在所需的位置。然后,您可以使用读取方法从文件中获取数据。
但是,这可能对您不起作用,因为第三行几乎可以肯定地从文件中的随机位置开始。随机位置是因为前两行的长度是可变的。
因此,除非您阅读文件以确定第3行从何处开始,否则在此问题中使用很少的情况是随机访问。
如果文件是属性文件(例如)或某种其他结构(json等)的形式,则可以始终使用库来帮助您读取文件的内容并提取所需的数据。 / p>
有关如何从文件中加载属性的示例,您可以参考Properties.load方法。
请注意,使用库访问文件可能会导致在库中读取整个文件。因此,如果您的目标是最大程度地减少I / O且输入文件很大,则可能无法实现该目标。
恕我直言,最简单的方法是读取并丢弃第一行,直到找到所需的行,然后对其进行处理