IO 流练习题

参考文章:

一   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 entry : pro.entrySet()){
			String key = (String) entry.getKey();
			Object value = entry.getValue();
			if (key.equals("score")) {
				value = "100";
			}
			map.put(key, value);
		}
		in.close();
		
		FileOutputStream fos = new FileOutputStream("g:\\config.properties");
		
		// 2,更新指定 “键key” 的  “值value”
		pro.putAll(map);
		pro.store(fos, "");
		System.out.println("修改数据之后的properties文件内容: "+pro);
		fos.close();
	}
	
	
	/*
	 *  创建配置文件 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();
	}
	
}

 

 

 

 

 

你可能感兴趣的:(JavaSE学习)