Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java如何读取特定行_Java_Login_Bufferedreader_Bufferedwriter - Fatal编程技术网

Java如何读取特定行

Java如何读取特定行,java,login,bufferedreader,bufferedwriter,Java,Login,Bufferedreader,Bufferedwriter,我想帮助自己,我制作了一个文件,可以创建一个用户文件,因为我计划制作一个游戏。它有一个可以写入登录名、显示名和密码的登录名。它将其写入以登录名命名的文件 现在我还想使用java制作一个登录脚本。我想知道,特别是,如何读取该行和已输入的密码 我有它,这样当它创建文件时,它会保存两次密码,一次作为“playerPass”,一次作为“currPass”,这样,如果有人计划更改密码(我将从登录脚本中使用),那么currPass将使用playerPass变量作为正确的密码读取。无论如何,我希望它使用Buf

我想帮助自己,我制作了一个文件,可以创建一个用户文件,因为我计划制作一个游戏。它有一个可以写入登录名、显示名和密码的登录名。它将其写入以登录名命名的文件

现在我还想使用java制作一个登录脚本。我想知道,特别是,如何读取该行和已输入的密码

我有它,这样当它创建文件时,它会保存两次密码,一次作为“playerPass”,一次作为“currPass”,这样,如果有人计划更改密码(我将从登录脚本中使用),那么currPass将使用playerPass变量作为正确的密码读取。无论如何,我希望它使用BufferedReader和FileReader来读取指示密码和当前密码的行,以便登录

有人能帮我解决这个问题吗?在某种程度上,我还是个新手

我可以调整代码,我只需要一点关于如何编码的解释,哈哈

变量:

playerLogName
playerName
playerPass
currPass
文件名:

Login.java
CharacterFileCreator.java
做了一个添加,使它工作了一半,但在我输入密码后它会锁定(使用Dr.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) {
            }
          }
        }
      }
    }
  }
}
编辑:

示例文件:

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

使用属性文件可能会更容易!你仍然可以给它任何你想要的文件扩展名,如果你愿意,甚至可以加密它,但是通过使用Properties对象,你可以获得或设置任何属性,而不管行号是什么

请看下面的示例:

更新:我发现了你的问题-你从来没有在
while
循环中读取文件的下一行,因此如果你把
System.out.println(line)放进去,你可能会发现这一点在循环中的某个地方,它会一直显示“[ACCOUNT]”-文件的第一行

为了解决这个问题,我可能倾向于将整个循环放在
try
catch
语句中,并将条件更改为
while((line=characterfile.readLine())!=null)
。这样,每个循环都使用下一行,但根据具体情况,捕获异常可能会有问题

或者,您可以添加
line=characterfile.readLine()if(line.equals(“[ACCOUNT]”)语句中将
ReadMode
设置为1之后,以及在测试
if(token.equals(“character password”)
时将其设置为else语句之后,

但是,如果您按照我的建议使用
Properties
文件,则无需执行任何循环来获取字符数据,因为您可以调用类似
password=propertyObject.getyProperty(“password”)
的内容,如示例链接所示


HTH

在你的问题中展示一个示例文件。“对不起,伙计们,这里是凌晨4:15,哈哈。”这不是一个有效的借口。如果你不得不为一个糟糕的问题找借口,这是一个好迹象,表明你不应该问这个问题,或者应该推迟问,直到你适合这样做-我17岁了,我还是个孩子,我有一个很好的“借口”,而这个“借口”是为了我的“脑屁”!我不想做其他事情,我是新手,我需要帮助,问问题的目的是寻求帮助,如果你不知道什么,你不知道,我已经找了一段时间的解决办法,好吧,几个小时了,但我不会坐12个小时看如何解决这样的问题。**是的,连续起床34小时是一个很好的借口,非常感谢。@Mauricio,我相信我展示的信息已经足够>>,我相信大多数人都会同意我的观点。@Daniel说实话,我比你年轻,我也不认为这是一个很好的借口。我用Java编程也才6个月左右。连续起床34小时可能也是一个原因——你和其他人一样,显然不能直接思考,因此,你可能忽略了/错过了程序中的一个简单错误,并在注意力不集中的情况下提问。你肯定会在“脑屁”之前想到“通行证”之类的东西吗?争论也不好,安德鲁和毛里西奥提出了正确的观点,并试图在你聪明的同时提供帮助!安迪,我会调查的,但在我这么做之前,我仍然希望找到一个解决我当前问题的方法,我也一样,我不会从我已经犯过的错误中学习,我只是学习新的东西来避免错误。不久前,我在一个非盈利、非托管的RuneScape私有服务器上进行了实验,只是为了获得一点编码经验,无论如何,感谢您的帮助。很遗憾,我无法用您提供的信息帮助您解决当前问题。在我看来,您的代码看起来不错,但我确实想知道您所说的“锁定”是什么意思,因为您的代码在检查密码后似乎没有什么作用-如果您的密码错误,
System.out.println()
line是否执行,或者您是否在任何地方收到任何异常/错误?不,之后没有任何内容,它只是冻结,我一直在等待,但什么也没有发生,我只需要重新编译它,这样它就不会再尝试执行任何使其锁定的操作。此外,我进行了编辑,而不是仅仅从布尔loggedIn false-true切换,我让它执行无效切换并显示系统消息,但是,对于错误/正确的密码仍然无效。请查看我的编辑。我想我已经解决了你的问题。。。我不想这么说,但这是一种简单的问题,当你累了,无法进行简单的调试时,你会错过它!。。。