Chapter 10 Programming Homework

1) Realize the mutual conversion between byte arrays and any basic types and reference types

提示:使用ByteArrayInutStream和ByteArrayOutputStream。

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Arrays;
import java.util.Date;

public class Work01 {
    
    
	
	public static void main(String[] args) throws IOException, ClassNotFoundException {
    
    
		
		// 字节数组输入流
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		// 对象输出流
		ObjectOutputStream oos = new ObjectOutputStream(bos);
		
		// 操作(写)
		oos.writeBoolean(false);
		oos.writeUTF("你好,世界!");
		oos.writeInt(123);
		oos.writeObject("Hello,world");
		// 时间对象的序列化
		oos.writeObject(new Date());
		// 自定义类对象的序列化
		oos.writeObject(new Students("小万", 98, 18));
		
		
		byte[] datas = bos.toByteArray();
		System.out.println(Arrays.toString(datas));		
		
		// 创建字节数组输入流
		ByteArrayInputStream bis = new ByteArrayInputStream(datas);
		// 创建对象输入流
		ObjectInputStream ois = new ObjectInputStream(bis);
		
		// 操作(读取数据,按照顺序)
		boolean flag = ois.readBoolean();
		System.out.println(flag);
		
		String str1 = ois.readUTF();
		System.out.println(str1);
		
		int a = ois.readInt();
		System.out.println(a);
		
		Object ss = ois.readObject();
		if(ss instanceof String) {
    
    
			String str = (String)ss;
			System.out.println(str);	
		}
		
		Object obj = ois.readObject();
		if(obj instanceof Date) {
    
    
			Date date = (Date)obj;
			System.out.println(date);
		}
		
		obj = ois.readObject();
		if(obj instanceof Students) {
    
    
			
			Students stu = (Students)obj;
			System.out.println(""+stu.getName()+"--"+stu.getScore()+"--"+stu.getAge());
			
			System.out.println();
		}
	}
}

class Students implements java.io.Serializable{
    
    
	
	private String name;
	private int score;
	private transient int age;
	
	public String getName() {
    
    
		return name;
	}
	public void setName(String name) {
    
    
		this.name = name;
	}
	public int getScore() {
    
    
		return score;
	}
	public void setScore(int score) {
    
    
		this.score = score;
	}
	public int getAge() {
    
    
		return age;
	}
	public void setAge(int age) {
    
    
		this.age = age;
	}
	
	public Students(String name, int score, int age) {
    
    
		super();
		this.name = name;
		this.score = score;
		this.age = age;
	}
}

2) Copy all the files and subfolders under the folder d:/sxtjava to d:/sxtjava2.

提示:涉及单个文件复制、目录的创建、递归的使用

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class Work02 {
    
    
	
	private static File srcFile = new File("/home/sweetheart/eclipse-workspace");
	private static File destFile = new File("/home/sweetheart/eclipse-workspace-copy");
	private static boolean flag = true;
	private static String fileName = "/home/sweetheart/eclipse-workspace";
	private static String fileName1 = "/home/sweetheart/eclipse-workspace-copy";
	
	public static void main(String[] args) {
    
    
		
		copy(srcFile);
	}
	
	public static void copy(File f) {
    
    
		
		if(flag) {
    
      // 如果是顶层文件夹
			flag = false;
			destFile.mkdir();
			File[] files = f.listFiles();
			
			for(File file:files) {
    
    
				copy(file);
			}
			
		}else {
    
    
			
			String destpath = f.getAbsolutePath().replace(fileName, fileName1);
			System.out.println(destpath);
			
			File f1 = new File(destpath);
			
			
			if(f.isFile()) {
    
    
				// 是文件的话直接拷贝
				copyDetial(f,f1);
				
			}else {
    
    
				// 文件夹的话先创建
				f1.mkdir();
				// 列出子级文件对象
				File[] files = f.listFiles();
				
				// 递归调用
				for(File file:files) {
    
    
					copy(file);
				}
			}	
		}
	}
	
	// 拷贝具体的文件(从源路径到目标路径)
	public static void copyDetial(File src,File dest){
    
    
		
		// 选择流
		try(InputStream is = new FileInputStream(src);
			OutputStream os = new FileOutputStream(dest,true)){
    
    
			
			// 操作(拷贝)
			
			int len = -1;
			byte[] datas = new byte[1024];
			
			while((len=is.read(datas))!=-1) {
    
    
				os.write(datas,0,len);
			}
			
			os.flush();
		} catch (FileNotFoundException e) {
    
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
    
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}
}

3) Use the class in the IO package to read the content of the exam.txt text file on the D disk, read one line of content at a time, put each line as an input into the generic collection of ArrayList and use the content in the collection to strengthen for for output display.

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

import java.util.ArrayList;
import java.util.List;



public class Work03 {
    
    

	public static void main(String[] args) {
    
    
		
		// 创建集合用来存储读取到的数据
		List<String> textList = new ArrayList<>();
		
		// 创建源
		File src = new File("exam.txt");
		
		// 选择流(采用try-catch-with...关闭)
		try(BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(src)))){
    
    
			
			String strLine = null;
			// 循环读取并添加到集合中
			while((strLine=br.readLine())!=null) {
    
    
				
				textList.add(strLine);
				
			}
			
			// 利用增强for打印
			for(String str:textList) {
    
    
				
				System.out.println(str);
			}
			
		} catch (FileNotFoundException e) {
    
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e1) {
    
    
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} 
		
	}
}

Guess you like

Origin blog.csdn.net/qq_46456049/article/details/109248451