循环文件编写器
Looping a file writer
我正在构建一个 relativley 简单的库存系统来说明我在文件中拥有的书籍,但是我在迭代输入时遇到了问题。
这是我的进口商品:
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
和全局变量:
private static File myFile = new File("libraryList.txt");
private static ArrayList<String> bookTitles = new ArrayList<String>();
private static Scanner inputScanner = new Scanner(System.in);
所以数组“bookTitles”存储了书名、作者、ISBN 和类型——所有这些都有有效的输入。我可以输入一本书的所有信息,就能写成功
主要问题出现在尝试写第二本书时。
我的“添加另一本书”循环有效,但是除了输入的第一本书之外,它不会写入任何内容。
System.out.println("Would you like to add another book? Y/N");
String addAnother = inputScanner.nextLine(); //assigns the answer for addAnother to the variable
if (addAnother.equals("N")) {
addNewBook = false; //if they don't want to add another, end the loop.
WriteToFile();
}
文件编写器也是如此 - 一切正常,但仅适用于第一次迭代。
public static void WriteToFile() {
try {
FileWriter myWriter = new FileWriter(myFile.getName(), true); //True means append to file contents, False means overwrite
System.out.println("This is the contents of the file:");
myWriter.write(""); //makes a space between each book
myWriter.write(bookTitles.get(0)+(" ")); // adds the current list to the file
myWriter.write(bookTitles.get(1)+(" "));
myWriter.write(bookTitles.get(2)+(" "));
myWriter.write(bookTitles.get(3)+("\n\n"));
myWriter.close();
System.out.println("Successfully wrote to the file.");
} catch (IOException e) {
System.out.println("An error occurred.");
e.printStackTrace();
}
}
我知道这个问题源于我只访问数组中的单元 0-3,但是我无法想出一个可以与我的其余代码一起正常工作的迭代 - 我已经尝试过的一切到目前为止刚刚坏了。
这是完整代码的 pastebin link:
您已正确识别问题,在您的 WriteToFile
方法中,您只是将 bookTitles
列表中的一本书添加到文件中,更准确地说,您只是添加了第一本书在当前输入 运行.
您必须将该代码更改为遍历整个 bookTitles
列表的循环。由于您将所有数据按顺序保存到列表中,并且由于您知道每本书恰好有 4 个数据单元,因此您可以使用索引增量为 4
的 for
循环。然后,不是访问 0, 1, 2, 3
处的索引,而是访问循环内 i, i+1, i+2, i+3
处的索引。
由于索引增量为 4
这意味着循环迭代中的索引将如下所示:
0, 1, 2, 3 // for the 1st book
4, 5, 6, 7 // for the 2nd book
// ...
size-4, size-4 + 1, size-4 + 2, size-4 + 3 // for the last book
在原来的代码中这就变成了
public static void WriteToFile() {
try {
FileWriter myWriter = new FileWriter(myFile.getName(), true); //True means append to file contents, False means overwrite
// adds the current list to the file
for (int i = 0; i < bookTitles.size(); i += 4) {
myWriter.write(bookTitles.get(i)+(" "));
myWriter.write(bookTitles.get(i+1)+(" "));
myWriter.write(bookTitles.get(i+2)+(" "));
myWriter.write(bookTitles.get(i+3)+("\n\n"));
}
myWriter.close();
System.out.println("Successfully wrote to the file.");
} catch (IOException e) {
System.out.println("An error occurred.");
e.printStackTrace();
}
}
我正在构建一个 relativley 简单的库存系统来说明我在文件中拥有的书籍,但是我在迭代输入时遇到了问题。
这是我的进口商品:
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
和全局变量:
private static File myFile = new File("libraryList.txt");
private static ArrayList<String> bookTitles = new ArrayList<String>();
private static Scanner inputScanner = new Scanner(System.in);
所以数组“bookTitles”存储了书名、作者、ISBN 和类型——所有这些都有有效的输入。我可以输入一本书的所有信息,就能写成功
主要问题出现在尝试写第二本书时。
我的“添加另一本书”循环有效,但是除了输入的第一本书之外,它不会写入任何内容。
System.out.println("Would you like to add another book? Y/N");
String addAnother = inputScanner.nextLine(); //assigns the answer for addAnother to the variable
if (addAnother.equals("N")) {
addNewBook = false; //if they don't want to add another, end the loop.
WriteToFile();
}
文件编写器也是如此 - 一切正常,但仅适用于第一次迭代。
public static void WriteToFile() {
try {
FileWriter myWriter = new FileWriter(myFile.getName(), true); //True means append to file contents, False means overwrite
System.out.println("This is the contents of the file:");
myWriter.write(""); //makes a space between each book
myWriter.write(bookTitles.get(0)+(" ")); // adds the current list to the file
myWriter.write(bookTitles.get(1)+(" "));
myWriter.write(bookTitles.get(2)+(" "));
myWriter.write(bookTitles.get(3)+("\n\n"));
myWriter.close();
System.out.println("Successfully wrote to the file.");
} catch (IOException e) {
System.out.println("An error occurred.");
e.printStackTrace();
}
}
我知道这个问题源于我只访问数组中的单元 0-3,但是我无法想出一个可以与我的其余代码一起正常工作的迭代 - 我已经尝试过的一切到目前为止刚刚坏了。
这是完整代码的 pastebin link:
您已正确识别问题,在您的 WriteToFile
方法中,您只是将 bookTitles
列表中的一本书添加到文件中,更准确地说,您只是添加了第一本书在当前输入 运行.
您必须将该代码更改为遍历整个 bookTitles
列表的循环。由于您将所有数据按顺序保存到列表中,并且由于您知道每本书恰好有 4 个数据单元,因此您可以使用索引增量为 4
的 for
循环。然后,不是访问 0, 1, 2, 3
处的索引,而是访问循环内 i, i+1, i+2, i+3
处的索引。
由于索引增量为 4
这意味着循环迭代中的索引将如下所示:
0, 1, 2, 3 // for the 1st book
4, 5, 6, 7 // for the 2nd book
// ...
size-4, size-4 + 1, size-4 + 2, size-4 + 3 // for the last book
在原来的代码中这就变成了
public static void WriteToFile() {
try {
FileWriter myWriter = new FileWriter(myFile.getName(), true); //True means append to file contents, False means overwrite
// adds the current list to the file
for (int i = 0; i < bookTitles.size(); i += 4) {
myWriter.write(bookTitles.get(i)+(" "));
myWriter.write(bookTitles.get(i+1)+(" "));
myWriter.write(bookTitles.get(i+2)+(" "));
myWriter.write(bookTitles.get(i+3)+("\n\n"));
}
myWriter.close();
System.out.println("Successfully wrote to the file.");
} catch (IOException e) {
System.out.println("An error occurred.");
e.printStackTrace();
}
}