这是一个锻炼程序,它询问用户的名字并创建一个存储所有数据的文件。在该文件中,有3个文字:fullName,age和experience。
当用户输入用户名时,无效的功能是打印文件中的所有信息。
所以,如果我有一个名为Bob的帐户,并且我在控制台中输入了Bob,我应该得到我的全名,我的年龄和我的经验。 (之前已经存储在文件中)。
这是我从文件中读取数据并将其打印出来的方法。我用调试器运行了几次,但它只读取文件的标题而不是其中的信息。结果是“找不到文件”。我该如何解决?感谢。
public void getInfo(String nameIn) {
Scanner keyboard = new Scanner(System.in);
Scanner x;
out.println("\nWhat's your account's name?");
nameIn = keyboard.nextLine();
//It reads the title of the file, not the data inside it.
try {
x = new Scanner(nameIn);
if (x.hasNext()) {
String a = x.next();
String b = x.next();
String c = x.next();
out.println("Account data for user: " + nameIn);
out.printf("Name: %s \tAge: %s \tExperience: %s", a, b, c);
}
} catch (Exception e) {
out.println("Could not find file.");
}
这是该类中其余代码。
public class createMember {
public String name;
private String fullName;
private String age;
private String experience;
private Formatter x;
public createMember(String name) {
this.name = name;
}
public void setMembership() {
try {
x = new Formatter(name);
out.println("File with name \"" + name + "\" has been created!");
} catch (Exception e) {
out.println("Could not create username.");
}
}
public void setInfo() {
Scanner keyboard = new Scanner(System.in);
out.println("Enter your Full Name");
fullName = keyboard.nextLine();
out.println("Enter your Age");
age = keyboard.nextLine();
out.println("Enter your lifting experience");
experience = keyboard.nextLine();
x.format("Name: %s \tAge: %s \tExperience: %s", fullName, age, experience);
}
答案 0 :(得分:1)
public void getInfo(String nameIn) {
Scanner keyboard = new Scanner(System.in);
Scanner x;
System.out.println("\nWhat's your account's name?");
nameIn = keyboard.nextLine();
//It reads the title of the file, not the data inside it.
try {
File file = new File("nameOfYourFile.txt");
x = new Scanner(file);
while (x.hasNextLine())) {
String line = x.nextLine();
if (line.contains(nameIn)){ // or you can use startsWith()
// depending how your text is formatted
String[] tokens = line.split(" ");
String a = tokens[0].trim();
String b = tokens[1].trim();
String c = tokens[2].trim();
System.out.println("Account data for user: " + nameIn);
System.out.printf("Name: %s \tAge: %s \tExperience: %s", a, b, c);
}
}
} catch (FileNotFoundException e) {
System.out.println("Could not find file.");
}
答案 1 :(得分:0)
您必须将InputStream
传递给扫描仪,而不是文件名。
final String pathToFile = "/my/dir/" + nameIn;
x = new Scanner(new FileInputStream(new File(pathToFile)));
即使我必须说我从未见过这种逐行读取文件的方法。我通常使用BufferedLineReader
来执行此操作。
答案 2 :(得分:0)
检查hasNext()
一次并调用next()
三次不是一个好设计。如果没有更多令牌可用,则第一个之后的任何next()
调用可能会失败。
因此,有一种可能性是,在第一次x.next()
通话后,您的代币已用完。
另一种可能性是给定的路径名nameIn
与文件系统上的任何文件都不对应。
此外,您应该使用更具体的类型而不是Exception
来捕获异常。如果你这样做了,你就会知道new Scanner(file)
或x.next()
中的哪一个引发了异常。