前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java中格式化输出数据

Java中格式化输出数据

作者头像
fanfan
发布2022-05-07 13:54:27
4020
发布2022-05-07 13:54:27
举报
文章被收录于专栏:编程思想之路

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

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

Formatter基本用法:

首先要获取formatter对象

代码语言:javascript
复制
formatter = new Formatter(System.out);

Formatter的构造方法中也可以闯入文件file,,等等,在这里,我将其传给控制台

获取到formatter对象后可以调用format方法

打印标题使用:

代码语言:javascript
复制
formatter.format("%-5s %s %6s %10s %10s\n", "姓名","年龄","身高","体重","体重指数");

打印内容使用:

代码语言:javascript
复制
formatter.format("%-5s %1d %13.2f %10.2f %10.2f\n", name,age,height,weight,bmi);

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

file中写数据

在写数据时,是否覆盖原本的数据问题,以及,获取的fos被系统回收等问题,均应注意

往file中写数据,首先要创建文件

代码语言:javascript
复制
/**
	 * 创建文件
	 * @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,在获取文件输出流时我传入了两个参数,当然也可以这样写

代码语言:javascript
复制
FileOutputStream fos = new FileOutputStream(file);

这样写,在每次往文件中写数据时都会覆盖掉原先的内容

可以查看源码发现,源码是这样的:

代码语言:javascript
复制
public FileOutputStream(File file) throws FileNotFoundException {
        this(file, false);
    }
代码语言:javascript
复制
  public FileOutputStream(File file, boolean append) throws FileNotFoundException {

上述两段代码是我截取 的FileOutputStream.java的源码,可以看到,如果在获取FileOutStream对象时,不传第二个参数,则默认为false,而第二个参数的意思是append,即追加

所以可以说两点

如果你想在每次文件中写数据时覆盖掉原先的数据,则不需要传第二个参数即:

代码语言:javascript
复制
FileOutputStream fos = new FileOutputStream(file);

但如果你不想覆盖掉原先的内容,则需要传一个true,即:

代码语言:javascript
复制
FileOutputStream fos = new FileOutputStream(file,true);

接下来就是往文件中进行格式化的写数据了,因为每次写一个字符串,  所以我用的是String.format()来写数据

write方法是自定义的获取文件输出流对象并写数据的方法,在此省略,在每次写数据时获取fos可以很好的避免fos被系统回收,造成异常问题。 先写标题:

代码语言:javascript
复制
write(String.format("%-5s %s %6s %10s %10s\n", "姓名","年龄","身高","体重","体重指数"));

然后内容:

代码语言:javascript
复制
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)));

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Formatter基本用法:
  • file中写数据
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档