Java中生成数据报表

通过查询数据库获取大量数据,并将数据保存到文本中,按照字段固定长度进行存放,汉字占两个字符英文字母占一个字符,超过长度进行截取,不够则右补空格,并使用“|”进行分割

设计方案:

由于数据量过大则需要采用分页方式进行分次进行处理,不可以一次获取全部数据。通过转换成字符数据精算获取字段数据的长度。使用String的format进行控制输出格式

commons-lang3包中StringUtils进行添加“|”
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;

public class Test {

    private String name;
    private String password;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String[] getString() {
        String[] obj = { name, password };
        return obj;
    }
public static void main(String[] args) {
        // TODO Auto-generated method stub
        List list = new ArrayList<Test>();
        Test t = new Test();
        t.setName("name1");
        t.setPassword("password1");
        list.add(t);
        Test t1 = new Test();
        t1.setName("汉字是");
        t1.setPassword("你的名字");
        list.add(t1);
        Test t2 = new Test();
        t2.setName("na");
        t2.setPassword("pa");
        list.add(t2);

        printAll(list);

    }

    public static void printAll(List list) {
        StringBuffer sb = new StringBuffer("");
        int[] element = { 3, 4 };
        String[] data;
        for (int i = 0; i < list.size(); i++) {
            Test t = (Test) list.get(i);
            data = (String[]) t.getString();
            List<String> sl = new ArrayList<String>();
            for (int j = 0; j < data.length; j++) {
                String format = "%-" + element[j] + "s";
                String fstr = String.format(format, data[j]);
                byte[] bs = fstr.getBytes();
                sl.add(new String(bs, 0, element[j]));
            }
            sb.append(StringUtils.join(sl, "|"));
            if (System.getProperty("file.separator").equals("/"))// 判断操作系统的类别
            {
                sb.append("\n");// linux
            } else {
                sb.append("\r\n");// windows
            }
            System.out.print(sb.toString());
        }
    }
}

结果

nam|pass
nam|pass
汉?|你的
nam|pass
汉?|你的
na |pa  

 

posted @ 2015-03-03 21:50  W&L  阅读(2212)  评论(0)    收藏  举报