java - 使用回调将字符串附加到文件

标签 java

我正在从数据库中读取数据,并希望使用回调从数据库中附加每行数据。我已经设法让回调工作,但我不知道如何让它将数据附加到文件中。这是我的代码。

主要

public class Main {

    public static void main(String[] args) {

        FileIO fileIO = new FileIO();
        fileIO.writeRStoFile();
    }
}

文件IO

public class FileIO implements DBAccess.CallBack {

    public void writeRStoFile() {

        DBAccess dbAccess = new DBAccess(this);

        String fileName = "/result.csv";

        try (FileWriter fw = new FileWriter(fileName)) {

            System.out.println("Starting data download from DB...");
            dbAccess.readDB();

            // HERE I LIKE TO APPEND EACH ROW TO THE FILE
            fw.append('\n');

            System.out.println("Finished data download from DB...");

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

    @Override
    public void iAmDone(String row) {
        System.out.println("Row: " + row);
    }
}

数据库访问

public class DBAccess {

    public interface CallBack {
        public void iAmDone(String row);
    }

    private final CallBack callBack;

    public DBAccess(CallBack callBack) {
        this.callBack = callBack;
    }

     public void readDB() {

        String url = "jdbc:Cobol:////Dev/Project Files/DatAndCpyFiles";

        try (Connection con = DriverManager.getConnection(url, "", "");
             Statement stmt = con.createStatement())
        {
            stmt.setFetchSize(10);

            Class.forName("com.hxtt.sql.cobol.CobolDriver").newInstance();

            String sql = "select * from PROFS";

            ResultSet rs = stmt.executeQuery(sql);

            ResultSetMetaData resultSetMetaData = rs.getMetaData();
            int iNumCols = resultSetMetaData.getColumnCount();
            for (int i = 1; i <= iNumCols; i++) {
                callBack.iAmDone(resultSetMetaData.getColumnLabel(i) + ";");
            }

            String field;

            while (rs.next()) {
                String row = "";
                for (int i = 1; i <= iNumCols; i++) {

                    field = rs.getString(i);

                    field = field.trim() + ";";

                    row = row + field;
                }
                callBack.iAmDone(row);
            }

            rs.close();

        } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}

我不确定如何将 iAmDone() 中的数据获取到 writeRStoFile() 方法中。我能够将数据打印到控制台。

最佳答案

我能想到的一种方法是将fw声明为FileIO中的成员变量。这样您就可以在 iAmDone 中调用 fw.append(...)。 (那么您可能必须更改 try-with-resources。)

关于java - 使用回调将字符串附加到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47371153/

相关文章:

java - MouseListener 未提供准确的鼠标位置

java - 使用 async-profiler 和 perf 测量 DirectByteBuffer

java - 为父实体 JPA-GAE 分配现有子实体

java - 如何在 alamkanak 周 View 中添加事件

java - Eclipse IDE 死代码警告有两个条件——如何抑制它?

java - 如何使用 DynamicJasper 在没有组的情况下在 JasperReports 的页脚处显示每列的总和?

java - 在Java中从JTable创建pdf文件

java - 使用 Java CLASS Day 查找自特定日期以来的天数,例如生日?

java - Spring Couchbase 健康指示器

java - 需要在 Java Web 应用程序中转义特殊字符