java对象横转纵_文件的横纵转换

通过文件的横纵转换对java的相关基础知识进行巩固

应用到的知识点有:

1.流(在此过程中主要用到的BufferedReader和BufferedWriter)

2.集合

重点突破:

对于这个问题重点就是一些思想的转化

1.如何拿到student.txt文件中的第一行

2.在第一行拿到之后,如何和后面的数据对应起来

需求:将下面的格式进行转换

student.txt

d34fe4f97fda9a37dea6c052c1703cff.png

转换后的格式:

0a4d552c47932d8f7663fd861a707004.png

student1.txt

d39b94955a7bfebe0749e23a957652b0.png

具体代码如下所示:

package com.gcy;

import java.io.Serializable;

public class Person implements Serializable,Comparable{

private String stuNo;

private String name;

private String gender;

private String age;

private String height;

private String weight;

private String tel;

public Person() {

super();

}

public Person(String stuNo, String name, String gender, String age, String height, String weight, String tel) {

super();

this.stuNo = stuNo;

this.name = name;

this.gender = gender;

this.age = age;

this.height = height;

this.weight = weight;

this.tel = tel;

}

public String getStuNo() {

return stuNo;

}

public void setStuNo(String stuNo) {

this.stuNo = stuNo;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getGender() {

return gender;

}

public void setGender(String gender) {

this.gender = gender;

}

public String getAge() {

return age;

}

public void setAge(String age) {

this.age = age;

}

public String getHeight() {

return height;

}

public void setHeight(String height) {

this.height = height;

}

public String getWeight() {

return weight;

}

public void setWeight(String weight) {

this.weight = weight;

}

public String getTel() {

return tel;

}

public void setTel(String tel) {

this.tel = tel;

}

@Override

public String toString() {

return "Person [stuNo=" + stuNo + ", name=" + name + ", gender=" + gender + ", age=" + age + ", height="

+ height + ", weight=" + weight + ", tel=" + tel + "]\n";

}

/**

* 根据学好进行排序

* @param o

* @return

*/

@Override

public int compareTo(Person o) {

return this.stuNo.compareTo(o.stuNo);

}

}

==========================================================

package com.gcy;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.util.ArrayList;

import java.util.Collection;

import java.util.Collections;

import java.util.List;

public class Test {

public static void main(String[] args) throws Exception {

convertor();

System.out.println("转换成功了");

}

public static void convertor() throws Exception {

// 创建一个高效的字符缓冲流,进行的读取

BufferedReader br = new BufferedReader(new FileReader("student.txt"));

String line = null;

// 创建一个集合,对person进行保存

List pList = new ArrayList();

// 判断是否是第一行的标志

boolean isFirst = true;

while ((line = br.readLine()) != null) {

// 获取第一行数据,思想:设置标志,通过标志进行判断

if (isFirst) {

// 对字符串进行一个分割,会生成一个字符串数组

String[] stuNos = line.split(" ");

// 学好 27s1 36 151s1 26s2 13s3

// 对第一行数据进行遍历,注意在遍历时应该从数组的第二个开始,第一个为头部信息

for (int i = 1; i < stuNos.length; i++) {

//System.out.println(stuNos[i].toString());

// 创建Person对象

Person p = new Person();

p.setStuNo(stuNos[i]);

pList.add(p);

}

//System.out.println(pList);

isFirst = false;

} else {

// 对剩余的所有行进行一个处理

// * 思想:利用第一行的处理,对集合进行一个遍历

String[] stuInfos = line.split(" ");

for (int i = 0; i < pList.size(); i++) {

// 获取每一个创建好的人

Person person = pList.get(i);

if (stuInfos[0].equals("姓名")) {

person.setName(stuInfos[i + 1]);

}

if (stuInfos[0].equals("性别")) {

person.setGender(stuInfos[i + 1]);

}

if (stuInfos[0].equals("年龄")) {

person.setAge(stuInfos[i + 1]);

}

if (stuInfos[0].equals("身高")) {

person.setHeight(stuInfos[i + 1]);

}

if (stuInfos[0].equals("体重")) {

person.setWeight(stuInfos[i + 1]);

}

if (stuInfos[0].equals("电话")) {

person.setTel(stuInfos[i + 1]);

}

}

}

}

Collections.sort(pList);

BufferedWriter bw=new BufferedWriter(new FileWriter("student1.txt"));

bw.write("学号 姓名 性别 年龄 身高 体重 电话");

//当写完一行是一定要记得换行

bw.newLine();

//进行一个循环

for(Person p:pList) {

bw.write(p.getStuNo()+" "+p.getName()+" "+p.getGender()+" "+p.getAge()+" "+p.getHeight()+" "+p.getWeight()+" "+p.getTel());

bw.newLine();

}

bw.flush();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值