Java中格式化输出数据

有时候,我们需要数据按某种格式输出:比如下图所示的

行对齐或者列队齐,列与列之间的空格,以及float型的数据,这时候,我们用到的是Formatter的format方法


Formatter基本用法:

首先要获取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);

至此,控制台就会出现你所看到的信息了


file中写数据

在写数据时,是否覆盖原本的数据问题,以及,获取的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)));

最后,呈现出的结果如下图所示




  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值