有时候,我们需要数据按某种格式输出:比如下图所示的
行对齐或者列队齐,列与列之间的空格,以及float型的数据,这时候,我们用到的是Formatter的format方法
首先要获取formatter对象
formatter = new Formatter(System.out);
Formatter的构造方法中也可以闯入文件file,,等等,在这里,我将其传给控制台
获取到formatter对象后可以调用format方法
打印标题使用:
formatter.format("%-5s %s %6s %10s %10s\n", "姓名","年龄","身高","体重","体重指数");
打印内容使用:
formatter.format("%-5s %1d %13.2f %10.2f %10.2f\n", name,age,height,weight,bmi);
至此,控制台就会出现你所看到的信息了
在写数据时,是否覆盖原本的数据问题,以及,获取的fos被系统回收等问题,均应注意
往file中写数据,首先要创建文件
/**
* 创建文件
* @return
*/
private FileOutputStream initFile(){
//判断sd卡是否可用
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File file = new File(Environment.getExternalStorageDirectory(),"fang.txt");
try {
if(!file.exists()){
file.createNewFile();
}
FileOutputStream fos = new FileOutputStream(file,true);
Toast.makeText(getApplicationContext(), "已成功创建文件", Toast.LENGTH_SHORT).show();
return fos;
} catch (Exception e) {
// // TODO Auto-generated catch block
e.printStackTrace();
// Toast.makeText(getApplicationContext(), "保存信息失败", Toast.LENGTH_SHORT).show();
return null;
}
}else {
Toast.makeText(getApplicationContext(), "sd卡不可用", Toast.LENGTH_SHORT).show();
return null;
}
}
在创建file时,首先判断sd卡是否存在,其次判断file是否已经存在
file创建成功后,获取fos,在获取文件输出流时我传入了两个参数,当然也可以这样写
FileOutputStream fos = new FileOutputStream(file);
这样写,在每次往文件中写数据时都会覆盖掉原先的内容
可以查看源码发现,源码是这样的:
public FileOutputStream(File file) throws FileNotFoundException {
this(file, false);
}
public FileOutputStream(File file, boolean append) throws FileNotFoundException {
上述两段代码是我截取 的FileOutputStream.java的源码,可以看到,如果在获取FileOutStream对象时,不传第二个参数,则默认为false,而第二个参数的意思是append,即追加
所以可以说两点
如果你想在每次文件中写数据时覆盖掉原先的数据,则不需要传第二个参数即:
FileOutputStream fos = new FileOutputStream(file);
但如果你不想覆盖掉原先的内容,则需要传一个true,即:
FileOutputStream fos = new FileOutputStream(file,true);
接下来就是往文件中进行格式化的写数据了,因为每次写一个字符串, 所以我用的是String.format()来写数据
write方法是自定义的获取文件输出流对象并写数据的方法,在此省略,在每次写数据时获取fos可以很好的避免fos被系统回收,造成异常问题。 先写标题:
write(String.format("%-5s %s %6s %10s %10s\n", "姓名","年龄","身高","体重","体重指数"));
然后内容:
write(String.format("%-5s %1d %13.2f %10.2f %10.2f\n", name, Integer.valueOf(age),
Float.valueOf(height), Float.valueOf(weight), Float.valueOf(bmi)));
最后,呈现出的结果如下图所示