Java学习之IO流四

1.用代码实现以下需求
(1)定义学生类,包含姓名(String name),性别(String gender),年龄(int age)三个属性,生成空参有参构造,set和get方法,toString方法
(2)键盘录入6个学员信息(录入格式:张三,男,25),要求有两个相同的信息,将6个学员信息存入到ArrayList集合中
(3)将存有6个学员信息的ArrayList集合对象写入到D:\\StudentInfo.txt文件中
(4)读取D:\\StudentInfo.txt文件中的ArrayList对象
(5)对ArrayList集合中的6个学生对象进行去重并按照年龄从小到大的顺序排序
(6)将ArrayList集合中排序后的结果利用PrintWriter流写入到E:\\StudentInfo.txt文件中(写入格式:张三-男-25)

 1 /**
 2  * (1)定义学生类,包含姓名(String name),性别(String gender),年龄(int age)三个属性,
 3  * 生成空参有参构造,set和get方法,toString方法
 4  * @author vanguard
 5  * @param <T>
 6  *
 7  */
 8 public class Student implements Serializable {
 9     /**
10      *
11      */
12     private static final long serialVersionUID = 1234545434L;
13     private String name;
14     private String gender;
15     private int age;
16
17     public Student() {}
18
19     public Student(String name, String gender, int age) {
20         super();
21         this.name = name;
22         this.gender = gender;
23         this.age = age;
24     }
25
26     public String getName() {
27         return name;
28     }
29
30     public void setName(String name) {
31         this.name = name;
32     }
33
34     public String getGender() {
35         return gender;
36     }
37
38     public void setGender(String gender) {
39         this.gender = gender;
40     }
41
42     public int getAge() {
43         return age;
44     }
45
46     public void setAge(int age) {
47         this.age = age;
48     }
49
50     @Override
51     public int hashCode() {
52         final int prime = 31;
53         int result = 1;
54         result = prime * result + age;
55         result = prime * result + ((gender == null) ? 0 : gender.hashCode());
56         result = prime * result + ((name == null) ? 0 : name.hashCode());
57         return result;
58     }
59
60     @Override
61     public boolean equals(Object obj) {
62         if (this == obj)
63             return true;
64         if (obj == null)
65             return false;
66         if (getClass() != obj.getClass())
67             return false;
68         Student other = (Student) obj;
69         if (age != other.age)
70             return false;
71         if (gender == null) {
72             if (other.gender != null)
73                 return false;
74         } else if (!gender.equals(other.gender))
75             return false;
76         if (name == null) {
77             if (other.name != null)
78                 return false;
79         } else if (!name.equals(other.name))
80             return false;
81         return true;
82     }
83
84     @Override
85     public String toString() {
86         return "Person [name=" + name + ", gender=" + gender + ", age=" + age
87                 + "]";
88     }
89
90
91 }
  1 /**
  2  * 1.用代码实现以下需求
  3     (1)定义学生类,包含姓名(String name),性别(String gender),年龄(int age)三个属性,
  4         生成空参有参构造,set和get方法,toString方法
  5     (2)键盘录入6个学员信息(录入格式:张三,男,25),要求有两个相同的信息,
  6          将6个学员信息存入到ArrayList集合中
  7     (3)将存有6个学员信息的ArrayList集合对象写入到D:\\StudentInfo.txt文件中
  8     (4)读取D:\\StudentInfo.txt文件中的ArrayList对象
  9     (5)对ArrayList集合中的6个学生对象进行去重并按照年龄从小到大的顺序排序
 10     (6)将ArrayList集合中排序后的结果利用PrintWriter流写入到
 11         E:\\StudentInfo.txt文件中(写入格式:张三-男-25)
 12  * @author vanguard
 13  *
 14  */
 15 public class Demo01 {
 16     public static void main(String[] args) throws IOException, ClassNotFoundException {
 17         List<Student> list = new ArrayList<Student>();
 18 //        list = addStudentInfo(list);
 19 //        writeStudentInfo(list);
 20         list = readStudentInfo(list);
 21         list = sortStudent(list);
 22         writeStudentInfoToFile(list);
 23
 24     }
 25     /**
 26      * 将ArrayList集合中排序后的结果利用PrintWriter流写入到
 27         E:\\StudentInfo.txt文件中(写入格式:张三-男-25)
 28      * @param list
 29      * @throws IOException
 30      */
 31     private static void writeStudentInfoToFile(List<Student> list) throws IOException {
 32         PrintWriter pw = new PrintWriter(new File("StudentInfo.txt"));
 33         for(Student s : list) {
 34             pw.println(s.getName() + "-" + s.getGender() + "-" + s.getAge());
 35             pw.flush();
 36         }
 37         pw.close();
 38     }
 39     /**
 40      * 对ArrayList集合中的6个学生对象进行去重并按照年龄从小到大的顺序排序
 41      * @param list
 42      * @return
 43      */
 44     private static List<Student> sortStudent(List<Student> list) {
 45         //6个学生对象进行去重
 46         Set<Student> set = new HashSet<Student>();
 47         List<Student> stu = new ArrayList<Student>();
 48         set.addAll(list);
 49         //按照年龄从小到大的顺序排序
 50         TreeSet<Student> students = new TreeSet<Student>(new Comparator<Student>() {
 51
 52             @Override
 53             public int compare(Student o1, Student o2) {
 54
 55                 return o1.getAge() < o2.getAge() ? -1 : 1;
 56             }
 57
 58         });
 59         for(Student s : set) {
 60             students.add(s);
 61         }
 62         for(Student s : students) {
 63             stu.add(s);
 64         }
 65         return stu;
 66     }
 67
 68     /**
 69      * 读取D:\\StudentInfo.txt文件中的ArrayList对象
 70      * 对象的反序列化
 71      * @param list
 72      * @return
 73      * @throws IOException
 74      * @throws ClassNotFoundException
 75      */
 76     private static List<Student> readStudentInfo(List<Student> list) throws IOException, ClassNotFoundException {
 77         FileInputStream fis = new FileInputStream(new File("student.txt"));
 78         ObjectInputStream ois = new ObjectInputStream(fis);
 79         list = (List<Student>) ois.readObject();
 80         for(Student s : list) {
 81             System.out.println(s);
 82         }
 83         return list;
 84     }
 85     /**
 86      * 将存有6个学员信息的ArrayList集合对象写入到D:\\StudentInfo.txt文件中
 87      * 对象的序列化
 88      * @param list
 89      * @throws IOException
 90      */
 91     private static void writeStudentInfo(List<Student> list) throws IOException {
 92         FileOutputStream fos = new FileOutputStream(new File("student.txt"));
 93         ObjectOutputStream os = new ObjectOutputStream(fos);
 94         os.writeObject(list);
 95         os.close();
 96         fos.close();
 97     }
 98     /**
 99      * 将学生信息添加到List集合中
100      * 键盘录入6个学生信息
101      * @param list
102      * @return
103      */
104     private static List<Student> addStudentInfo(List<Student> list) {
105         //键盘录入6个学员信息
106         Scanner sc = new Scanner(System.in);
107         for(int i = 0; i < 6; i++) {
108             String personInfo = sc.next();
109             String[] s = personInfo.split(",");
110             Student student = new Student(s[0], s[1], Integer.parseInt(s[s.length-1]));
111             list.add(student);
112         }
113         return list;
114     }
115 }

2.用代码实现以下需求:
(1)已知配置文件config.properties中有三个键值对
name=zhangsan
score=80
address=beijing
(2)使用IO字节流对象和Properties类结合使用,将配置文件中的score键的值修改为100

 1 /**
 2  * 2.用代码实现以下需求:
 3     (1)已知配置文件config.properties中有三个键值对
 4            name=zhangsan
 5            score=80
 6            address=beijing
 7     (2)使用IO字节流对象和Properties类结合使用,将配置文件中的score键的值修改为100
 8  * @author vanguard
 9  *
10  */
11 public class Demo02 {
12     public static void main(String[] args) throws IOException {
13         Properties prop = new Properties();
14         //创建字符输入流对象
15         FileReader fr = new FileReader("config.properties");
16         //流对象读取文件中的键值对,保存到集合
17         prop.load(fr);
18         //修改键为score的值为100
19         prop.setProperty("score", "100");
20         //创建字符输出流对象
21         FileWriter fw = new FileWriter("config.properties");
22         //接收所有的字符的输出流,将集合中的键值对,写回文件中保存
23         prop.store(fw, "");
24         //释放资源
25         fw.close();
26         fr.close();
27     }
28 }

3.获取指定目录及子目录下所有txt文件的个数,并将这些txt文件复制到D盘下任意目录

 1 /**
 2  * 3.获取指定目录及子目录下所有txt文件的个数,并将这些txt文件复制到D盘下任意目录
 3  * @author vanguard
 4  *
 5  */
 6 public class Demo03 {
 7     public static void main(String[] args) {
 8         File src = new File("d:\\TortoiseSVN");
 9         File dest = new File("d:\\txt");
10         //定义文件个数
11         int count = 0;
12         try {
13             count = fileNum(src, dest, count);
14         } catch (IOException e) {
15
16             e.printStackTrace();
17         }
18         System.out.println("txt文件的个数为:" + count);
19     }
20
21     /**
22      * 统计指定目录及子目录下所有txt文件的个数
23      * @param src
24      * @throws IOException
25      */
26     private static int fileNum(File src, File dest, int count) throws IOException {
27         //遍历目录下的文件及目录
28         for(File f : src.listFiles()) {
29             if(f.isDirectory()) {
30                 count = fileNum(f, dest, count);
31             } else {
32                 //如果是文件,且以.txt结尾,文件个数加1,调用复制文件方法
33                 if(f.getName().endsWith(".txt")) {
34                     count++;
35                     copyFile(f, new File(dest, f.getName()));
36                 }
37             }
38         }
39         return count;
40     }
41
42     /**
43      * 复制文件
44      * @param src
45      * @param dest
46      * @throws IOException
47      */
48     private static void copyFile(File src, File dest) throws IOException {
49         //定义字符输入流缓冲流对象
50         BufferedReader br = new BufferedReader(new FileReader(src));
51         //打印流对象
52         PrintWriter pw = new PrintWriter(new FileWriter(dest));
53         //定义读取字符串
54         String line = null;
55         while(null != (line = br.readLine())) {
56             pw.println(line);
57
58         }
59         //释放资源
60         br.close();
61         pw.close();
62     }
63 }
时间: 2025-01-14 04:41:27

Java学习之IO流四的相关文章

Java学习日记-----IO流

1.java.io包下 File类:java程序中的此类的一个对象,就对应着一个文件或网络中的一个资源. Flie file1 = new File("D:\\io\\hello.txt"); File file2 = new File("D:\\IO\\io1"); >1. File既可以表示一个文件也可以表示一个文件目录 >2.   File的对象是与平台无关的 >3. File类针对于文件或文件目录,只能进行新建.删除.重命名.上层目录等等操

Java学习之IO流

转载链接:https://blog.csdn.net/zhaoyanjun6/article/details/54292148 Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了

Java学习日记-----IO流 练习

分别使用字节流和字符流完成以下程序: 1. 在指定的路径下新建一个 .txt 文件 "test.txt",利用程序在文件中写入如下内容: "Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称.Java 技术具有卓越的通用性.高效性.平台移植性和安全性,广泛应用于个人PC.数据中心.游戏控制台.科学超级计算机.移动电

Java学习之IO流三

1.从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中(高效流) 1 /** 2 * 1.从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中 3 * @author vanguard 4 * 5 */ 6 public class Demo01 { 7 public static void main(String[] args) { 8 //键盘输入两个文件夹路径 9 Scanner sc = new Scanner(System.in); 1

Java学习之IO流一

01. IO技术概述 * a: Output * 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作 * b: Input * 把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作 * c: IO操作 * 把上面的这种输入和输出动作称为IO操作 02. File类的概述和作用 * A:File类的概述和作用 * a: File的概念 * File类是文件和目录路径名的抽象表示形式 * Java中把文件或者目录(文件夹)都封装成File对象 * 我们要去操作硬盘

Java学习之IO流总结

---恢复内容开始--- 流是用来读写数据的,java有一个类叫File,它封装的是文件的文件名,只是内存里面的一个对象,真正的文件是在硬盘上的一块区间,在这个文件里面存放着各种各样的数据,我们想读文件里面的数据怎么办?是通过一个流的方式来读的,咋恩要想从程序读数据,对于计算机来说,无论读什么类型的数据都是以01010101010101这样的形式读取的,怎么把文件里面的数据读取出来呢?你可以把文件想象成一个小桶,文件就是一个桶, 文件里面的数据就相当于是这个桶里面的水,那么我们怎么从这个桶里面取

java学习笔记--IO流

第十二章大纲: I/O input/output 输入/输出 一.创建文件,借助File类来实现 file.createNewFile() : 创建文件 file.exists() : 判断文件是否存在,如果存在,则返回true delete() : 删除文件,如果删除成功,则返回true deleteOnExit() : 程序退出的时候才删除文件 二.创建文件夹 exists() : 判断文件夹是否存在,如果存在,则返回true delete() : 删除文件夹,如果删除成功,则返回true

Java学习之IO流(转换流)

转换流:就是对字节流和字符流之间转换的流对象 InputStreamReader:字节流到字符流的桥梁.解码 OutputStreamWriter:字符流到字节流的桥梁.编码 1 private static void readKey3() throws IOException { 2 // 字节流 3 InputStream in = System.in; 4 5 // 字节流转成字符流.解码 6 Reader r = new InputStreamReader(in); 7 // 字符流 8

Java学习之IO流(序列流--SequenceInputStream)

SequenceInputStream表示其他输入流的逻辑串联.它从输入流的有序集合开始,从第一个开始读取,直到到达文件末尾,然后从第二个开始读取,依此类推,直到在最后一个包含的输入流中到达文件末尾 构造函数 SequenceInputStream?(InputStream s1, InputStream s2) SequenceInputStream?(Enumeration<? extends InputStream> e) 实例: 1 //将1.txt,2.txt,3.txt文件合并到一