无法获得SQL结果以写入文件Java

时间:2017-06-05 19:14:49

标签: java sql

标题说明了一切。这是我的ResultSet代码:

try {
    while (rs.next()) {
        int ID  = rs.getInt("ID");
        String Name = rs.getString("Name");
        String CountryCode = rs.getString("CountryCode");
        String District = rs.getString("District");
        int Population = rs.getInt("Population");

        //Display values
        try {
            writeToFile(ID, Name, CountryCode, District, Population);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

这是我的writeToFile方法:

public void writeToFile(int id, String name, String countryCode, String district, int population) throws IOException {
    FileWriter fw = new FileWriter("C:\\Users\\horry\\Desktop\\results.txt");
    fw.write(id + " " + name + " " + countryCode + " " + district + " " + population + "\n");
    try {
        fw.flush();
        fw.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我尝试了通常的flush和close方法,但缺少了一些东西。文件编写者应该被宣布为elsewgere吗?

2 个答案:

答案 0 :(得分:2)

尝试使用附加选项

打开文件
 FileWriter fw = new FileWriter("C:\\Users\\horry\\Desktop\\results.txt", true);

要在任何平台(例如linux)中添加新行,请使用下面的常规行分隔符

fw.write(id + " " + name + " " + countryCode + " " + district + " " + population + System.getProperty("line.separator"));

答案 1 :(得分:-1)

您正在为ResultSet的每次迭代打开一个新的FileWriter。默认情况下,FileWriter会在文件的开头写入。因此,您将不断覆盖上一次迭代中文件中所写的内容。

此外,我建议不要在每次迭代时创建一个新的FileWriter。我只打开一次FileWriter,并将其用于所有的配置。

然后,使用BufferedWriter而不是纯FileWriter。它会快得多。

另外,在finally块中关闭writer,而不是在try中。从Java 7开始,您甚至可以使用try-with-resources。

最后,使用br.newLine();写一个新行,而不是自己管理“\ n”。

请检查以下代码

File f = new File("C:\\Users\\horry\\Desktop\\results.txt");
try (BufferedWriter bw = new BufferedWriter(new FileWriter(f))) {
    while (rs.next()) {
        int id  = rs.getInt("ID");
        String name = rs.getString("Name");
        String countryCode = rs.getString("CountryCode");
        String district = rs.getString("District");
        int population = rs.getInt("Population");
        bw.write(id + " " + name + " " + countryCode + " " + district + " " + population);
        bw.newLine();
    }
}