如何遍历 ArrayList,然后使用 Iterator 的下一个方法写入文件?



这是提示:

- 从 ArrayList 中获取一个迭代器并分配给本地 变量。

- 使用迭代器遍历 ArrayList 并写入每个 toString 由迭代器的下一个方法返回的输出文件的信用卡号。 (这次不需要写任何标签。

这就是我到目前为止所拥有的。我在写入文件时遇到问题:

public static void writeArr(ArrayList<CreditCardNumber> temp) {
FileOutputStream outFile = null;
try {
outFile = new FileOutputStream("/Users/raska/Desktop/prog6.txt");
} catch (FileNotFoundException e) {
System.err.println(e);
return;
} // end catch
Iterator<CreditCardNumber> iter = temp.iterator();
PrintWriter prtWriter = new PrintWriter(outFile, true);
while (iter.hasNext()) {
CreditCardNumber obj = iter.next();
prtWriter.println(obj);
}
}

这是我对 ArrayList 的用户输入:

public static ArrayList<CreditCardNumber> userInputArrList() {
System.out.println("Enter the number of elements in the array: ");
int arrLength = scanner.nextInt();
if (arrLength < 1) {
arrLength = 1;
}
ArrayList<CreditCardNumber> aList = new ArrayList<CreditCardNumber>(arrLength);
for (int i = 0; i < arrLength;) {
try {
System.out.println("Enter an issuer ID# (6 digits) for element #" + i);
String issuerId = scanner.next();
System.out.println("Enter an account # (9 digits) for element #" + i);
String accountNum = scanner.next();
CreditCardNumber obj = new CreditCardNumber(issuerId, accountNum);
obj.changeId(issuerId);
aList.add(obj);
i++;
} catch (IllegalArgumentException e) {
System.out.println(e.toString()); // don't throw just
// print
}
}
return aList;
}

问题是你从来没有close()PrintWriterFileOutputStream

在方法结束时,执行以下操作:

try {
prtWriter.close();
catch (IOException e) {
// Do some error reporting.
e.printStackTrace();
}

更好的方法是使用 Java 的 try-with 资源语句:

public static void writeArr(ArrayList<CreditCardNumber> temp) {
try (FileOutputStream outFile = new FileOutputStream("/Users/raska/Desktop/prog6.txt")) {
Iterator<CreditCardNumber> iter = temp.iterator();
PrintWriter prtWriter = new PrintWriter(outFile, true);
while (iter.hasNext()) {
CreditCardNumber obj = iter.next();
prtWriter.println(obj);
}
} catch (IOException e) {
System.err.println(e);
return;
}
}

您可以使用以下示例使用迭代器遍历数组。网络上还有很多其他的。

while (iter.hasNext()) {
CreditCardNumber obj = iter.next();
System.out.println(obj.toString()); -> line causing problem...you need to write to printWriter...using system.out simple outputs to the console
}

正确的代码:

while (iter.hasNext()) {
CreditCardNumber obj = iter.next();
prtWriter.write(obj.toString()); //hopefully you have overridden toString() in you CreditCardNumber class       
}

最新更新