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