Java 使用回调函数将字符串追加到文件

Java 使用回调函数将字符串追加到文件,java,Java,我正在从数据库中读取数据,并且喜欢使用回调来追加数据库中的每一行数据。我已经设法使回调正常工作,但我不知道如何将数据附加到文件中。这是我的密码 主要 菲利奥 public class FileIO implements DBAccess.CallBack { public void writeRStoFile() { DBAccess dbAccess = new DBAccess(this); String fileName = "/result.

我正在从数据库中读取数据,并且喜欢使用回调来追加数据库中的每一行数据。我已经设法使回调正常工作,但我不知道如何将数据附加到文件中。这是我的密码

主要

菲利奥

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();
        }
    }
}
公共类DBAccess{
公共接口回调{
已完成的公共作废(字符串行);
}
私有最终回调;
公共数据库访问(回调){
this.callBack=回调;
}
public void readDB(){
String url=“jdbc:Cobol:////Dev/Project 文件/DatAndCpyFiles”;
try(Connection con=DriverManager.getConnection(url,“,”);
语句stmt=con.createStatement())
{
stmt.setFetchSize(10);
Class.forName(“com.hxtt.sql.cobol.CobolDriver”).newInstance();
String sql=“从PROFS中选择*”;
结果集rs=stmt.executeQuery(sql);
ResultSetMetaData ResultSetMetaData=rs.getMetaData();
int iNumCols=resultSetMetaData.getColumnCount();

对于(int i=1;i我可以想到的一种方法是在
FileIO
中将
fw
声明为成员变量。这样,您就可以在
iAmDone
中调用
fw.append(…)
(您可能需要更改try with resources)

问题不在于追加。问题在于将
iAmDone
链接到
fw.append
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();
        }
    }
}