很抱歉我还是Java的新手,基本上我的最终结果是要求输入'pin code',并且该pincode将在文本文档中,但我不知道如何设置他们在下面的阵列?我的数组输出保持null
而不是文档中的文本。还有一个出现的问题。
文本文档与Java类放在同一个文件夹中,我应该制作完整的路径吗?
文本中只有两个项目,例如我希望每个项目分别位于listArray [0]和listArray [1]中
如果文件内部是字面意思:
1111,john doe,5000 / n *输入* 2222,格伦约翰逊,4000我需要左边的引脚号是数组[0],而名字是数组[1]
这是一个事后的想法并没有考虑拥有多个帐户
这是我到目前为止所尝试的内容:
public class Confirmation extends ATMrunner {
public static void pinConfirm() {
String[] listArray = new String[2];
try {
BufferedReader br = new BufferedReader(new FileReader("C:\Users\workspace\TellerMachine\src\bankATM\userlist.txt"));
String line = "";
while ((line = br.readLine()) != null) {
for (int i = 0; i <= 1; i++) {
listArray[i] = line;
}
}
br.close();
} catch (IOException ioe) {
System.out.println("File may be corrupted; please contact admin");
}
System.out.println(listArray[0]);
System.out.println(listArray[1]);
}
}
感谢一些帮助!
答案 0 :(得分:2)
好的,首先要做的事情是:
完整路径给出了无效的转义序列错误。
这是因为在Java中,实际上有很多编程语言;声明String时,可以使用一些特殊字符;例如“新行”字符\n
,它是一个单个字符,告诉读取字符串数据的任何内容,在该点应该有一个新行。
您可以阅读有关这些'转义序列in this Wikipedia article的更多信息。
当您声明绝对路径时,其中包含多个\
个字符,这些字符用于表示这些特殊字符。因此,对于\Users
,可以看到您正在尝试输入值\U
的“特殊字符”,但没有。解决这个问题;只需使用\
替换所有\\
个字符。
其次,在读取文件的while(和for)循环中; while循环的每次迭代都会得到一个新的文件行。
(line = br.readLine()) != null
然后在此之后,您将遍历String数组,“listArray”并将每个元素设置为当前行。
for (int i = 0; i <= 1; i++) {
listArray[i] = line;
}
这里出现的问题是,您将要读取文件的第一行,然后将数组的两个元素设置为该行。然后你要读另一行文件;并将所有元素设置为该行。然后......
要改变这种情况,我建议使用如下技术:
int index = 0;
String line = "";
while((line = br.readLine()) != null) {
listArray[index] = line;
index++;
}
现在,这个while循环将执行与您的相同的操作,但是使用此循环;你还要跟踪数组的当前索引。 while循环的每个循环都将读取一行并将当前索引分配给该循环,然后它将增加索引。这种方法的问题在于,如果您的文件包含多于2行,则while循环将第三次运行并尝试在数组上分配越界索引。要更改此设置,您可以尝试在尝试分配索引之前检查索引是否在数组边界内,如下所示:
while((line = br.readLine()) != null && index < listArray.length)
当然有更好的方法可以做到这一切,但所有这些应让您的应用程序正常运行。