java:IO-一个文件读写例子

任务:文件格式转换。
---------------------
 
在本题号对应的文件夹中,有一个示例输入文件: in.txt ”(编码方式为 gb2312
其中的内容为参加某次大赛学校及其参赛学生的得分等信息
 
其基本格式如下:
 
aaa 工程技术学院 :010-21345673:na005:xijing
84:java:13553001115: 张小林
67:c:13725330616: 李自云
25:java:13312349988: 肖为
bbb 理工大学 :094-32421233:km008:lushan
81:c:18997111533: 徐路
92:java:: 曹丽
ccc 传媒大学 :041-44441233:mt009:linhai
88:c++:15900010002: 夏侯艺人
 
 
第一行数据是院校信息,信息项以冒号 (:) 分开。
院校信息共有 4 项,从左到右依次是:
 
1. 院校名称,不多于 15 个字符,可能含有汉字。
2. 院校电话,不多于 15 个字符,只含有数字或空格或连字符 (-)
3. 院校编号,不多于 6 个字符,只含有数字和字母。
4. 归属地,不多于 8 个字符。只含有字母。
 
接下来是若干行(至少 1 行,不多于 100 行)学生信息,直到遇到下一条院校信息。
院校信息与学生信息的区别是:第一项如果是一个 0~100 间的整数,则为学生信息,否则为院校信息。
 
学生信息一共 4 项,从左到右依次是:
 
成绩, 1~100 的整数。
参赛组别,不多于 10 个字符,只含英文和数字。
学生电话,不多于 15 个字符,只含有数字或空格或连字符 (-) ,该信息可能为空。
学生姓名,不多于 6 个字符,可以包含汉字。
 
院校的信息不超过 1000 行,且每个参赛院校只有一条信息。
所有信息项,除了学生电话一项外,均不为空。
 
 
要求编程,读入 in.txt 文件,按照新的格式组织输出到 out.txt
具体要求:
1. 编码方式为 GB2312
2. 输出信息为每个学生占一行,包含其所属院校的信息。
3. 输出信息的顺序,按照信息在 in.txt 出现的先后顺序
4. 每个信息项占用固定的宽度(注意每个汉字的输出宽度为 2 ),其宽度规格明细为:
   院校名称: 30
   院校电话: 16
   院校编号: 6
   归属地:  8
   学生成绩: 4
   参赛组别: 10
   学生电话: 16
   学生姓名: 12
 
5. 每项信息在其宽度区间内左对齐,不足宽度用西文空格填充(注意不是用 tab 制表符)。
6. 归属地是如下字符串的,输出用等号后的汉字串代替:
  xijing= 西京
  lushan= 鲁山
  pingyang= 平阳
  danling= 丹凌
  xinyuan= 新元  
 
 
如果输入文件如 in.txt 所示,输出则应为 out.txt 所示,即输出文件内容为:
 
na005 aaa 工程技术学院                010-21345673     西京    张小林     java  84  13553001115     
na005 aaa 工程技术学院                010-21345673     西京    李自云       c         67  13725330616     
na005 aaa 工程技术学院                010-21345673     西京    肖为         java      25  13312349988     
km008 bbb 理工大学                    094-32421233     鲁山    徐路         c         81  18997111533     
km008 bbb 理工大学                    094-32421233     鲁山    曹丽         java      92                  
mt009 ccc 传媒大学                    041-44441233    linhai   夏侯艺人     c++       88  15900010002   
 
 
选手注意:
1. 我们在评价您的代码的时候,用的是完全不同的测试数据,但其格式与 in.txt 相同。
2. 请把所有 java 类写在一个文件中,调试通过,拷贝至:“解答”文件夹下:“解答 .txt ”即可。
不要拷贝相关的工程、配置等文件。
3. 代码中只能使用 jdk5.0 兼容的 API ,不能使用更高版本的特性。代码中不要使用 package 语句。
 

public   class  T4 {
public   static   void  main(String[] args) throws  Exception{
    File f1 = new  File( "in.txt" );
    BufferedReader read = new  BufferedReader( new  InputStreamReader( new  FileInputStream(f1), "GB2312" ));
    File f2 = new  File( "out.txt" );
    f2.createNewFile();
    BufferedWriter writer = new  BufferedWriter( new  OutputStreamWriter( new  FileOutputStream(f2), "GB2312" ));
    String strinfo; // 存放一行信息
    String[] info; // 存放一行信息以 ":" 分解后
    String schoolInfo = "" ; // 存放学校信息
    while ((strinfo = read.readLine()) != null ) {
        info = strinfo.split( ":" );
        if (! isNumber (info[0])) { // 如果是学校信息
            schoolInfo = String. format ( "%-6s%-" +(30- chineseNum (info[0]))+ "s%-16s%-8s" , info[2], info[0],             info[1], getGuiShuDi (info[3]));
        }  else  { // 学生信息
            String studentInfo = String. format ( "%-" +(12- chineseNum (info[3]))+ "s%-10s%-4s%-16s" , info[3], info[1], info[0], info[2]);
            writer.write(schoolInfo + studentInfo);
            writer.newLine();
        }
    }
    read.close();
    writer.close();
}
 
public   static   boolean  isNumber(String str) {
if (str.length()>2) return   false ;
for ( int  i=0; i<str.length(); i++) {
char  c = str.charAt(i);
if (c< '0'  || c> '9' ) {
return   false ;
}
}
return   true ;
}
public   static  String getGuiShuDi(String str) {
    if (str == "xijing" ) {
        return   " 西京 " ;
    }
    if (str == "lushan" ) {
        return   " 鲁山 " ;
    }
    if (str == "pingyang" ) {
        return   " 平阳 " ;
    }
    if (str == "danling" ) {
        return   " 丹凌 " ;
    }
    if (str == "xinyuan" ) {
        return   " 新元 " ;
    }
    return   "" ;
}
public   static   int  chineseNum(String str) throws  UnsupportedEncodingException { // 获得汉字个数
    return  str.getBytes( "gb2312" ). length  - str.length();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值