网站首页 > java教程 正文
平时我们在电脑上创建文件,word文档。对他们进行各种各样的处理。
今天为大家演示一下如何使用Java代码实现对文件的读写操作
老规矩,IDE仍然使用eclipse。下面我为大家分步骤进行介绍
问题
读取文件中的学生成绩表,并将他们按照成绩的高低进行排序,最后把结果输出到另外一个文件中
步骤一
创建一个Student类(也就是学生类)这个类是专门用来存储学生的信息的,比如学生的姓名、学号、成绩等,同时设置好访问这个学生属性的方法,因为学生的属性都是私有化的。在eclipse中可以使用快捷方式自动生成。
步骤二
创建一个文本文本,里面写入我们要读取的学生信息,包括学生姓名、学号、成绩。如下图
步骤三
编写测试类,这里有几个处理函数,我为大家解释一下
方法一:封装学生对象
public List<Student> setlist(String path) throws Exception:名字为setlist 参数为文件路径,意思就是只要你传一个文件路径给我,我就能帮你把他的数据读出来,然后封装成一个个的学生对象,再返回给你。具体操作如下图。
方法二:输出文本文件
public void write(String newpath, List<Student> list) throws IOException :方法名为write,参数为学生类型的集合。意思也很简单,只要你把排好顺序的集合给我,我就能把他输出到一个新的文本文件中。你看是不是很简单?
方法三:冒泡排序算法
public List<Student> array(List<Student> list) 方法名为array,参数为学生类型的集合,意思就是只要你给我一个学生类型的集合,我就能把他们的成绩从高到底的排序,并把排序好的结果返回给你。具体算法如下(这是非常著名的冒泡排序算法哦,当然也很简单啦,相信你一定可以看的懂)
最后程序的入口
方法四:主函数
在主函数里面,你只需创建一个对象,调用上述的方法,把文件路径传给他们,剩下的他们就会自动帮你完成啦!你看,是不是很简单呢?以下是主函数的内容。
运行结果
看,是不是已经为你排好顺序了呢?很简单哒,快跟我一起学习来!
最后,贴出全部代码。
学生类
public class Student {//创建一个学生对,设置相应属性,并设置获取他字段的方法 private String name; private Integer id; private Integer grade; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getGrade() { return grade; } public void setGrade(Integer grade) { this.grade = grade; } @Override public String toString() { //tostring一下方面打印学生的完整信息 return "Student [name=" + name + ", id=" + id + ", grade=" + grade + "]"; } }
测试类
import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Four_5 { public static void main(String[] args) throws Exception { Four_5 fi = new Four_5();//创建一个对象 List<Student> list = fi.setlist("hello.txt");//调用函数,引入文件 List<Student> arraylist = fi.array(list);//把这个集合传进来并进行排序 for (Student stu : arraylist) {//遍历这个数组 System.out.println(stu.getId() + "\t" + stu.getName() + stu.getGrade()); } fi.write("student.txt", arraylist);//调用方法,把数据写入新文件中 } // 读取文件中的数据,并把每一个学生封装成学生对象 public List<Student> setlist(String path) throws Exception { List<Student> list = new ArrayList<>();//创建一个集合对象,类型为学生类型。用来存放学生对象 Scanner sc = new Scanner(new File(path));//创建一个文本输入对象 while (sc.hasNext()) {//判断是否有下一行 Student stu = new Student();//创建一个学生对象 String nl = sc.nextLine();//读出这一行的内容,并赋值给字符串变量nl String[] sp = nl.split(" ");//以空格为标准对字符串进行分割 stu.setId(Integer.parseInt(sp[1]));//使用学生对象调用方法设置他的ID属性,Integer.parseInt()这个方法可以把字符型转变为整数型变量 stu.setName(sp[0]);//使用学生对象调用方法设置他的名字属性 stu.setGrade(Integer.parseInt(sp[2]));//使用学生对象调用方法设置他的成绩属性 list.add(stu);//将这个设置好属性内容的学生对象装入list集合 System.out.println(stu);//打印一次才装入的这个学生信息是否正确 } sc.close();//关闭资源 return list;//返回这个集合 } // 写到新文件中 public void write(String newpath, List<Student> list) throws IOException { FileWriter fw = new FileWriter(newpath);//创建一个写文件对象,参数为文件路径/文件名 BufferedWriter bw = new BufferedWriter(fw);//创建一个写入流对象 for (int i = 0; i < list.size(); i++) {//循环判断,是否小于这个集合的大小 bw.write(list.get(i).getId() + "\t" + list.get(i).getName() + "\t" + list.get(i).getGrade());//写入学生对象的属性,并进行拼接 bw.newLine();//换新的一行 } bw.flush(); fw.close();//关闭资源 } // 排序 public List<Student> array(List<Student> list) { for (int i = 0; i < list.size() - 1; i++) { for (int j = 0; j < list.size() - 1; j++) { if (list.get(j).getGrade() < list.get(j + 1).getGrade()) { Student s = list.get(j);//获得下标为j的学生对象 list.set(j, list.get(j + 1));//把下标为j+1的学生对象移到下标为j的位置 list.set(j + 1, s);//同上 set方法的功能是替换列表中指定位置的元素 } } } return list;//返回这个集合 } }
猜你喜欢
- 2024-10-01 「每日分享」内存文件映射方式读取超大文件踩坑题解析
- 2024-10-01 尚学堂百战程序员之读写配置文件教程
- 2024-10-01 Spark中读写不同类型文件(如何改文件的读写类型)
- 2024-10-01 Java中文件使用流操作基础知识(java文件流不关闭的后果)
- 2024-10-01 Java 读取txt文件生成Word文档(java读取txt文件存为字符串)
- 2024-10-01 零基础编程培训系列JAVA入门课程第十一讲Java文件处理
- 2024-10-01 SpringBoot读取.yml配置文件最常见的两种方式
- 2024-10-01 java IO流读取文件并统计文件中各个字符出现的次数
- 2024-10-01 Java读取配置文件config.properties
- 2024-10-01 常见Java问题及笔试题(十八)——说一说代码中读取文件的事
你 发表评论:
欢迎- 最近发表
-
- 五,网络安全IDA Pro反汇编工具初识及逆向工程解密实战
- 「JAVA8」- Lambda 表达式(java lambda表达式原理)
- 深入探讨Java代码保护:虚拟机保护技术的新时代
- Nginx反向代理原理详解(图文全面总结)
- 逆向拆解日本IT,哪些Java技术栈薪资溢价高
- mybatis 逆向工程使用姿势不对,把表清空了,心里慌的一比
- Spring Boot集成ProGuard轻松实现Java 代码混淆, Java 应用固若金汤
- 从 Java 代码逆向工程生成 UML 类图和序列图
- 人与人相处:尊重是标配,靠谱是高配,厚道是顶配
- Windows系统安装日期如何修改(windows10怎么修改安装日期)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)