参考文章:
一 Java学习之IO流四 https://www.cnblogs.com/guodong-wang/p/7219801.html
二 【Java】去除List中的重复值并按照从小到大排列 http://blog.csdn.net/kisscatforever/article/details/78150462
三 黑马程序员——Java语言基础——06.集合框架(2)泛型和Map集合
http://blog.csdn.net/yuexiaoli321/article/details/42027363
四 java排序方法 https://jingyan.baidu.com/article/7e44095323e53d2fc1e2ef77.html##1
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.用代码实现以下需求
(1)定义学生类,包含姓名(String name),性别(String gender),
年龄(int age)三个属性,生成空参有参构造,set和get方法,toString方法
(2)键盘录入6个学员信息(录入格式:张三,男,25),要求有两个相同的信息, inputStuInfo()
将6个学员信息存入到ArrayList集合中
(3)将存有6个学员信息的ArrayList集合对象 arrayListToFile()
写入到D:\\StudentInfo.txt文件中
(4)读取D:\\StudentInfo.txt文件中的ArrayList对象 readArrayList()
(5)对ArrayList集合中的6个学生对象进行去重并按照年龄从小到大的顺序排序 removeAndSort()
(6)将ArrayList集合中排序后的结果利用PrintWriter流 writeArrayList()
写入到E:\\StudentInfo.txt文件中(写入格式:张三-男-25)
*/
package homework1;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
public class WriteDemo {
public static void main(String[] args) throws IOException, ClassNotFoundException {
List list = new ArrayList();
// inputStuInfo(list);
// System.out.println(list);
// arrayListToFile(list);
list = readArrayList(list);
list = removeAndSort(list);
writeArrayList(list);
}
/*
* (6)将ArrayList集合中排序后的结果利用PrintWriter流 printArrayList()
* 写入到E:\\StudentInfo.txt文件中(写入格式:张三-男-25)
*/
public static void writeArrayList(List list) throws IOException {
File file = new File("h:\\StudentInfo.txt");
FileOutputStream fos = new FileOutputStream(file, true);
PrintWriter pw = new PrintWriter(fos, true);
//最后写入文本格式
System.out.println("=====写入H盘格式化数据为:=====");
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
pw.println(stu.getName() + "-" + stu.getGender() + "-" + stu.getAge());
System.out.println(stu.getName() + "-" + stu.getGender() + "-" + stu.getAge());
}
pw.close();
}
/*
* (5)对ArrayList集合中的6个学生对象进行去重并按照年龄从小到大的顺序排序 removeAndSort()
*/
public static List removeAndSort(List list) {
// ArrayList 去除重复内容
Set set = new HashSet();
//利用set的去重功能
set.addAll(list);
//清空list,准备接收去重后的数据
list.clear();
list.addAll(set);
System.out.println("=====" +
"去重后未排序的数据:=====");
System.out.println(list);
// ArrayList 去重之后排序
for (int i = 0; i < list.size(); i++) {
for (int j = i+1; j < list.size(); j++) {
if (list.get(i).getAge() > list.get(j).getAge()) {
Student stu = list.get(i);
list.set(i,list.get(j));
list.set(j,stu);
}
}
}
// 输出去重排序之后的ArrayList
System.out.println("=====排序后的数据为:=====");
for(Student stu : list)
System.out.println(stu);
return list;
}
/*
* (4)读取D:\\StudentInfo.txt文件中的ArrayList对象 readArrayList()
*/
public static List readArrayList(List list) throws IOException, ClassNotFoundException {
File file = new File("g:\\StudentInfo.txt");
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
list = (List)ois.readObject();
System.out.println("=====原始数据为:=====" +
"");
System.out.println(list);
ois.close();
return list;
}
/*
* (3)将存有6个学员信息的ArrayList集合对象
* 写入到D:\\StudentInfo.txt文件中
*/
public static void arrayListToFile(List list) throws IOException {
File file = new File("g:\\StudentInfo.txt");
FileOutputStream osw = new FileOutputStream(file, true);
ObjectOutputStream oos = new ObjectOutputStream(osw);
oos.writeObject(list);
oos.close();
}
/*
* (2)键盘录入6个学员信息(录入格式:张三,男,25),要求有两个相同的信息,
* 将6个学员信息存入到ArrayList集合中
*/
public static void inputStuInfo(List list) {
Scanner sc = new Scanner(System.in);
String[] strArr = new String[3];
System.out.println("键盘录入6个学员信息(录入格式:张三,男,25)");
for (int i = 0; i < 6; i++) {
strArr = sc.next().split(",");
list.add(new Student(strArr[0], strArr[1], Integer.parseInt(strArr[2])));
}
// System.out.println(list);
}
}
2.用代码实现以下需求:
(1)已知配置文件config.properties中有三个键值对
name=zhangsan
score=80
address=beijing
(2)使用IO字节流对象和Properties类结合使用,将配置文件中的score键的值修改为100
/*
* 2.用代码实现以下需求:
(1)已知配置文件config.properties中有三个键值对
name=zhangsan
score=80
address=beijing
(2)使用IO字节流对象和Properties类结合使用,将配置文件中的score键的值修改为100
*/
package homework2;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
public class PropertiesDemo {
public static void main(String[] args) throws IOException {
makePro();
setScore();
}
/*
* (2)使用IO字节流对象和Properties类结合使用,将配置文件中的score键的值修改为100
*/
public static void setScore() throws IOException{
FileInputStream fos = new FileInputStream("g:\\config.properties");
Properties pro = new Properties();
pro.load(fos);
System.out.println("未改数据之前的properties文件内容: "+pro);
pro.setProperty("score","100");
fos.close();
System.out.println("改了数据之后的properties文件内容: "+pro);
}
/*
* 创建配置文件 config.properties,并写入三个键值对
* name=zhangsan
* score=80
* address=beijing
*/
public static void makePro() throws IOException{
FileOutputStream fos = new FileOutputStream("g:\\config.properties");
Properties pro = new Properties();
pro.setProperty("name","zhangsan");
pro.setProperty("score","80");
pro.setProperty("address","beijing");
pro.store(fos, "");
fos.close();
}
}
3.获取指定目录及子目录下所有txt文件的个数,并将这些txt文件复制到D盘下任意目录
/*
* 3.获取指定目录及子目录下所有txt文件的个数,并将这些txt文件复制到D盘下任意目录
*
* 解题思路:
* 使用commons-IO 工具类 里的 方法 获取后缀getExtension(),复制文件 copyFile()
*/
package homework3;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
public class Copy_Txt {
public static void main(String[] args) throws IOException {
// File src = new File("g:\\"); //改成 g盘 根目录会报空指针异常,因为有写文件没有访问权限
File src = new File("g:\\txt");
File desc = new File("h:\\txt");
copyTxt(src,desc);
}
/*
* 写一个函数
* 将所有的txt文件复制到 D 盘下任意目录
*/
public static void copyTxt(File src,File desc) throws IOException{
File[] files = src.listFiles();
for (int i = 0; i < files.length; i++) {
if(files[i].isDirectory()){
copyTxt(files[i],desc);
}else{
if(FilenameUtils.isExtension(files[i].getName(), "txt"))
FileUtils.copyFileToDirectory(files[i],desc);
}
}
}
}
练习题2 修改后的代码,谢谢 fbwind 的提醒:
/*
* 2.用代码实现以下需求:
(1)已知配置文件config.properties中有三个键值对
name=zhangsan
score=80
address=beijing
(2)使用IO字节流对象和Properties类结合使用,将配置文件中的score键的值修改为100
*/
package homework2;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
public class PropertiesDemo {
public static void main(String[] args) throws IOException {
makePro();
setScore();
}
/*
* (2)使用IO字节流对象和Properties类结合使用,将配置文件中的score键的值修改为100
*/
public static void setScore() throws IOException{
// 1,读取properties文件,将键值对放入到map中
InputStream in = new FileInputStream("g:\\config.properties");
Properties pro = new Properties();
pro.load(in);
System.out.println("未改数据之前的properties文件内容: "+pro);
Map map = new HashMap<>();
for(Entry