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;
}
}
}