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