【问题标题】:Please correct my function to write an array of objects to a file请更正我的函数以将对象数组写入文件
【发布时间】:2014-06-26 11:19:42
【问题描述】:

对不起,如果这个问题非常愚蠢,但它就在这里。我正在制作一个函数/方法(有人可以告诉我哪个词适合 Java 吗?)并且希望在将对象数组写入文件时得到一些帮助。下面是我当前的代码,它导致一个空白的文本文件!请帮忙!

public static void writelines(Object[] data, String filename, String extension) {
    for (int i = 0; i < data.length; i++) {
        try {
            String fileid = filename + "." + extension;

            File file = new File(fileid);@SuppressWarnings("resource")
            PrintWriter writer = new PrintWriter(new FileWriter(file));
            writer.println(data[i]);
        } catch (IOException writeFail) {}
    }
}

我该如何解决这个问题?

【问题讨论】:

  • 在循环外打开文件,完成后关闭。

标签: java arrays file function methods


【解决方案1】:

由于您的文件创建发生在循环内,因此您正在为每一行文本重新创建文件。你应该将你的代码重组为这样的:

        try {
            String fileid = filename + "." + extension;

            File file = new File(fileid);
            @SuppressWarnings("resource")
            PrintWriter writer = new PrintWriter(new FileWriter(file));

            for (int i = 0; i < data.length; i++) {
                writer.println(data[i]);
            }
        }
        catch (IOException writeFail) {}

【讨论】:

    【解决方案2】:

    每次您尝试将内容写入文件时,您都会创建新的FileWriter。默认情况下,FileWriter 构造函数会重置文件的内容,所以这是您的第一个问题。为了解决它,在循环之前创建一次。

    第二个问题是你没有关闭你的作家。因此,在您完成将所有数据写入文件后使用

    writer.close()
    

    甚至更好地使用try-with-resources 为您自动关闭它

    try(PrintWriter writer = new PrintWriter(new FileWriter(new File(filename + "." + extension)))){
        for (int i = 0; i < data.length; i++) 
            writer.println(data[i]);
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    你的最后一个问题(好吧,也许不是真正的问题,而是非常坏的习惯)是你正在消费异常。这段代码

    catch (IOException writeFail) {}
    

    将来会成为许多令人头疼的问题。 catch 块的目的是处理问题而不是避免它们。如果您不知道如何解决它,那么至少打印有关它的信息,这样您就知道还有一些问题需要修复。所以在最坏的情况下使用

    catch (IOException e) {
        e.printStackTrace();
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2017-07-09
      • 2016-01-06
      • 1970-01-01
      • 2022-11-27
      • 2019-03-01
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      相关资源
      最近更新 更多