循环文件编写器

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:

https://pastebin.com/BiXBuu88

您已正确识别问题,在您的 WriteToFile 方法中,您只是将 bookTitles 列表中的一本书添加到文件中,更准确地说,您只是添加了第一本书在当前输入 运行.

您必须将该代码更改为遍历整个 bookTitles 列表的循环。由于您将所有数据按顺序保存到列表中,并且由于您知道每本书恰好有 4 个数据单元,因此您可以使用索引增量为 4for 循环。然后,不是访问 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();
        }
    }