繁体   English   中英

使用Firebase在Java中将多行写入CSV文件

[英]Writing multiple lines to CSV file in Java with Firebase

我一直试图(未成功)将从Firebase检索到的多行数据写入文件,然后将其上传到存储中。 我使用此示例创建了PrintWriter,然后使用循环从Firebase数据库中的多个子级收集值。 文件名的扩展名为.csv。

    public PrintWriter pw;   

    ...     

    File file = new File(this.getFilesDir(), filename);

    pw = new PrintWriter(new BufferedWriter(new FileWriter(file, true)));

    String columns = <COLUMNS>;
    pw.write(columns);

    patientRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            for (DataSnapshot postSnapshot: snapshot.getChildren()) {
                Object object = postSnapshot.getValue(Object.class);
                String value1 = object.getValue1(); 
                ...
                String row = value1 + ", " + value2 + ", "...;
                pw.println(row);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    pw.close();

从Log语句中,可以看到从onDataChanged()的值创建的字符串是正确的。 我唯一的问题是它不会从循环中写入文件。 上载CSV文件时,文件中唯一的文本是列,下面还有一个空格。

为什么不追加行?

String columns = <COLUMNS>;
pw.write(columns);

patientRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        for (DataSnapshot postSnapshot: snapshot.getChildren()) {
            Object object = postSnapshot.getValue(Object.class);
            String value1 = object.getValue1(); 
            ...
            String row = value1 + ", " + value2 + ", "...;
            pw.println(row);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

pw.close();

您已将某些事件侦听器添加到PatientRef,但这并不意味着onDataChange(...)已立即执行,它仅注册为侦听器。 添加后,您将关闭PrintWriter,因此不会写入除列以外的任何内容,因为执行SingleValueEvent时pw已关闭。 您需要在实际事件执行后或其内部关闭pw。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM