第13次抽考(IO流)
1、将文本文件a.txt 复制成 b.txt。要求: a. 用逐个字符复制方式; b. 用逐行读写方式; c. 用字符数组方式 2、将压缩包a.rar复制成b.rar。 注意:复制前后手工打开文件,若复制后无法打开,则说明复制文件有误。 3、设计一个单链表,配备基本的创建、输出等操作。通过序列化机制将其写入文件,再通过反序列化机制从文件中读出。在序列化前/后输出链表内容。
一.
1.a:
package week4; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; //将文本文件a.txt复制成b.txt public class Work1 { public static void main(String[] args) throws IOException { File a=new File("a.txt"); //a.createNewFile(); File b =new File("b.txt"); //b.createNewFile(); //文本文件用FileReader/FileWriter try { FileReader in =new FileReader(a);//这里就像一个水管接上了a.txt,a.txt像水龙头,当我们要read的时候就会放水 FileWriter out =new FileWriter(b);//这里一个水管接上了b.txt,b.txt像池子当我们要write的时候就会将水倒入池子中 int ch;//这里是ASCILL码的值 while((ch=in.read())!=-1) { out.write(ch); } in.close(); out.close(); System.out.println("复制完成"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch(IOException e) { e.printStackTrace(); } } }
1.b:
package week4; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; //采用缓冲区进行逐行读取 public class Work1 { public static void main(String[] args) throws IOException { //创建文件 File a=new File("a.txt"); File b=new File("b.txt"); //接入水管和池子 FileReader in =new FileReader(a); FileWriter out=new FileWriter(b); //用BufferedReader包装,成为一个缓冲区 BufferedReader b_in=new BufferedReader(in); BufferedWriter b_out=new BufferedWriter(out); System.out.println("开始文件复制"); String s; while((s=b_in.readLine())!=null) { b_out.write(s,0,s.length()); b_out.newLine(); } b_in.close(); b_out.close(); System.out.println("结束文件复制"); } }
1.c
package week4; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; //采用字符数组来作为缓冲区来复制文件 public class Work1 { public static void main(String[] args) throws IOException { //创建文件对象 File a=new File("a.txt"); File b=new File("b.txt"); char[] ca=new char[(int)a.length()]; FileReader in=new FileReader(a); FileWriter out=new FileWriter(b); System.out.println("开始文件复制"); in.read(ca); out.write(ca); in.close(); out.close(); System.out.println("文件复制结束"); } }
2.复制压缩包
package week4; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; //使用字节流复制压缩包文件 public class Work1 { public static void main(String[] args) throws IOException { File a=new File("a.zip"); File b=new File("b.zip"); FileInputStream in =new FileInputStream(a); FileOutputStream out=new FileOutputStream(b); int ch; while((ch=in.read())!=-1) { out.write(ch); } System.out.println("复制完成"); } }
3.
package week4; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.Scanner; //序列化单链表,只有实现Serializable接口,才能序列化,transient修饰的不会被序列化 public class Work1 { public static void main(String[] args) throws IOException { Node a=new Node(0); a.create(); a.print(); //先将对象写入输出流,恰好相反 FileOutputStream fo=new FileOutputStream("serialObj.dat"); ObjectOutputStream obj_o=new ObjectOutputStream(fo); obj_o.writeObject(obj_o); obj_o.close(); //从dat文件中读取 FileInputStream fi=new FileInputStream("serialObj.dat"); ObjectInputStream obj_i=new ObjectInputStream(fi); try { Node b=(Node)obj_i.readObject(); obj_i.close(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class Node implements Serializable { Node next; int value; public Node(int value) { this.value=value; } //创建单链表 public void create() { int tmpValue; Scanner sc=new Scanner(System.in); Node p=this; while((tmpValue=sc.nextInt())!=-1) { Node n=new Node(tmpValue); p.next=n; p=n; } p.next=null; System.out.println("创建成功"); } //打印单链表 public void print() { Node p=this; while(p!=null) { System.out.println(p.value); p=p.next; } } }