Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过从arrayList中删除或添加对象更新CSV文件_Java_File_Arraylist - Fatal编程技术网

Java 通过从arrayList中删除或添加对象更新CSV文件

Java 通过从arrayList中删除或添加对象更新CSV文件,java,file,arraylist,Java,File,Arraylist,从标题可以看出,我只想通过从ArrayList中删除或添加对象来更新文件 我的代码相当大,你不必看到它,它可以正常工作。您所要知道的是,我有一个名为WriteToFileName的方法,该方法中没有任何内容,因为我当前所在的位置假设每次我在arrayList中添加或删除对象时都会调用该方法。我尝试过使用BufferedWriter方法,但该类没有任何可以写入对象的方法 如果您真的需要查看我的代码,这里有一个指向pastebin的链接。 该文件也是一个CSV文件。因为您的产品类有一个自定义的to

从标题可以看出,我只想通过从ArrayList中删除或添加对象来更新文件

我的代码相当大,你不必看到它,它可以正常工作。您所要知道的是,我有一个名为WriteToFileName的方法,该方法中没有任何内容,因为我当前所在的位置假设每次我在arrayList中添加或删除对象时都会调用该方法。我尝试过使用BufferedWriter方法,但该类没有任何可以写入对象的方法

如果您真的需要查看我的代码,这里有一个指向pastebin的链接。


该文件也是一个CSV文件。

因为您的产品类有一个自定义的toString方法,所以您应该使用PrintWriter而不是BufferedWriter,因为它有一些有趣且方便的方法,比如println,可以输出对象的字符串表示

大概是这样的:

public static void writeFile(ArrayList<Product> p, String file) throws IOException {
    PrintWriter pw = new PrintWriter(new FileWriter(file));

    for (Product pro : p){
        pw.println(pro);

        /*
        // And of course something less fancy like this would work too
        pw.println(pro.getProductName() 
            + "," + pro.getQuantity()
            + "," + pro.getPrice()
            + "," + pro.getUPC());
        */
    }
    pw.close();
}

所以我查找了一个类,我认为它可能解决了我的问题,但实际上它并没有被称为ObjectOutputStream。当我使用它时,它从文件中删除了我的所有数据起初我以为是这样的,但在我的excel文件中,一些数据看起来像$%@$@%12索尼耳机或类似的东西,但这并没有出现在我的实际文件中

这是我写文件的方法

public static void writeToFile(ArrayList<Product> p)
{
    try 
    {
        BufferedWriter writer = new BufferedWriter(new FileWriter("product.csv"));

        for (Product p1 : p) 
        {
            writer.write(p1.toString());
        }

        writer.close();
    } 
    catch (IOException ex) 
    {
        System.out.println("Input/Output format error");
    }
}

每次ArrayList更改时都写入整个文件。请参阅,了解如何将列表写入CSV。或者使用预先存在的库,就像我们不希望看到您的所有代码一样。只是你遇到麻烦的代码。Pastebin代码不能保证在堆栈溢出的同时启动。我遇到的问题是实现一个方法,该方法在每次添加或删除对象时都会写回文件。您建议的只是输出arraylist具有的任何内容。当然,我可以看到arrayList包含了我输入的所有信息,但是文件没有反映这些信息,这就是writefile方法的目的;通过回写来更新文件。很抱歉,我不明白。PrintWriter可以输出到文件。如果您的整个数据库都已加载到ArrayList中,那么清除该文件并将其全部转储回ArrayList又有什么错呢?也许我不明白这对我来说还是很新鲜的。这就是我要说的。假设你有一个这样的文件:索尼耳机,15,3.99123456摩托罗拉平板电脑,55499987654这意味着这个文件有两个感兴趣的项目。如果我添加HDMI,10500945632,它会将它添加到arrayList中,但不会添加到文件中,这就是我要做的。@ChronoTrigger或者在每次更改列表时调用writeFile方法,将列表包装到自定义列表中,允许您在更改时注册事件/写入文件:此时您将调用此writeFile方法,每次更改ArrayList时。如果您想让它自动发生,您必须创建自己的类来扩展ArrayList并重写add和remove方法,以便除了执行普通ArrayList所做的super.add和super.remove之外,它还可以写入文件。product类还实现了serializable。