IO流(上机练习)

IO流1作业

上机练习1:
– 文件“我的青春谁做主.txt”位于D盘根目录下,要求将此文件的
内容复制到
– C:\myFile\myPrime.txt中

public class FileReaderWriterTest {
    @Test   //如果你没有@Test注解的话,使用main方法也是一样的。
    public void test()  {
        FileReader fileReader= null;
        FileWriter fileWriter= null;
        try {
            fileReader = new FileReader("d:/我的青春谁做主.txt");
            fileWriter = new FileWriter("c:/myFile/myPrime.txt");
            char[] cbuf=new char[1024];
            int len;
            while ((len=fileReader.read(cbuf))!=-1){
                fileWriter.write(cbuf,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //关闭流资源
            if (fileWriter!=null) {
                try {
                    fileWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fileReader!=null) {
                try {
                    fileReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

上机练习2:
▪ 复制图片
▪ 将D:\盘指定的图片复制到当前项目中
▪ 需求分析: ▪ 使用字节的输入流FileInputStream读取字节
▪ 使用字节的输入流FileOutputStream写入文件
public class CopyPicture {
    @Test
    public void test1() {
        FileInputStream fileInputStream= null;
        FileOutputStream fileOutputStream= null;
        try {
            fileInputStream = new FileInputStream("d:/皮卡丘.jpg");
            fileOutputStream = new FileOutputStream(new File("test/filepractice/皮卡丘.jpg"));
            byte[] buffer=new byte[1024];
            int len;
            while ((len=fileInputStream.read(buffer))!=-1){
                fileOutputStream.write(buffer,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //关闭流资源
            if (fileOutputStream!=null) {
                try {
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fileInputStream!=null) {
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

上机练习3:
【1】使用File类的方法去创建一个文本文件,先进行判断
如果没有则创建,如有有则先删除再创建
【2】使用BufferedWriter将如下文字
《虞美人》
春花秋月何时了?
往事知多少。
小楼昨夜又东风,
故国不堪回首月明中。
雕栏玉砌应犹在,
只是朱颜改。
问君能有几多愁?
恰似一江春水向东流。
写入【1】中所创建的文件
【3】再将【2】中写入的文件读取到控制台输出

public class FileTest {
    @Test
     public void test()  {
        FileWriter fw= null;
        BufferedWriter bw= null;
        try {
            File file=new File("d:/1");
            if (!file.exists()){
                file.mkdir();
            }
            File file1=new File("d:/1/刚哥.txt");
            if (!file1.exists()){
                file1.createNewFile();
            }
            fw = new FileWriter(file1);
            bw = new BufferedWriter(fw);
            bw.write("《虞美人》"+"\n");
            bw.write("春花秋月何时了?"+"\n");
            bw.write("往事知多少。"+"\n");
            bw.write("小楼昨夜又东风,"+"\n");
            bw.write("故国不堪回首月明中。"+"\n");
            bw.write("雕栏玉砌应犹在,"+"\n");
            bw.write("只是朱颜改。"+"\n");
            bw.write("问君能有几多愁?"+"\n");
            bw.write("恰似一江春水向东流。"+"\n");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bw!=null) {
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fw!=null) {
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    @Test
    public void test1() {
     File file=new File("d:/2");
     if (!file.exists()){
         file.mkdir();
     }
     File file1=new File("d:/2/刚哥.txt");
     if (!file1.exists()){
         try {
             file1.createNewFile();
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
    }
    @Test
    public void test2(){
        FileReader fr= null;
        FileWriter fw= null;
        BufferedWriter bw= null;
        try {
            fr = new FileReader("d:/1/刚哥.txt");
            File file=new File("d:/2/刚哥.txt");
            fw = new FileWriter(file);
            bw = new BufferedWriter(fw);
            char[] cbuf=new char[1024];
            int len;
            while ((len=fr.read(cbuf))!=-1){
                bw.write(cbuf,0,len);
                System.out.print(new String(cbuf,0,len));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bw!=null) {
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fw!=null) {
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fr!=null) {
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

上机练习4:
▪ 【1】创建User类,包含以下属性name:String,age:int
▪ ,gender enum,重写toString方法显示对象的信息
▪ 【2】使用BufferedWriter写入文件以“,”分隔
▪ 【3】使用BufferedReader读取信息并进行分割,还原成对象,
调用
▪ 对象的toString方法输出对象的信息

1.创建需要的枚举类User
public enum  User implements Serializable {

    //1.提供当前枚举类的多个对象,多个对象之间用逗号" , "隔开,末尾使用分号" ; "
     userInfo1("Jack",18),
     userInfo2("Jay",18),
     userInfo3("Roman",20);
    //2.声明User对象的属性:private final修饰
    private  final String userName;
    private  final int age;
    //3.私有化类的构造器,并给对象赋值
    User(String userName, int age) {
        this.userName = userName;
        this.age = age;
    }
    //4.其他诉求1:获取枚举类对象的属性
    public String getUserName() {
        return userName;
    }
    public int getAge() {
        return age;
    }
    //4.其他诉求1:提供toString()
    @Override
    public String toString() {
        return "User{" +
                "userName='" + userName + '\'' +
                ", age=" + age +
                '}';
    }
    }
2.使用BufferedWriter写入文件以“,”分隔
public class BufferedWriterPractice {
        @Test
    public void test() {
        FileWriter fileWriter= null;
        BufferedWriter bufferedWriter= null;
        try {
            File file=new File("d:/content.txt");
            fileWriter = new FileWriter(file);
            bufferedWriter = new BufferedWriter(fileWriter);
            User userInfo1=User.userInfo1;
            User userInfo2=User.userInfo2;
            User userInfo3=User.userInfo3;
            bufferedWriter.write(userInfo1.getUserName()+" , "+userInfo1.getAge()+",");
            bufferedWriter.write(userInfo2.getUserName()+" , "+userInfo2.getAge()+",");
            bufferedWriter.write(userInfo3.getUserName()+" ,"+userInfo3.getAge());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bufferedWriter!=null) {
                try {
                    bufferedWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fileWriter!=null) {
                try {
                    fileWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

3.使用BufferedReader读取信息并进行分割,还原成对象,
调用对象的toString方法输出对象的信息

public class BufferedReaderPractice {
    @Test
    public void test() {
        FileReader fr = null;
        BufferedReader br = null;
        ObjectInputStream ois = null;
        try {
            fr = new FileReader("d:/content.txt");
            br = new BufferedReader(fr);
            File file = new File("d:/content.txt");
            char[] cbuf = new char[1024];
            int len;
            while ((len = br.read(cbuf)) != -1) {
                User user =User.valueOf("userInfo1");//valueOf():可以根据对象名去调用信息
                User user1 = User.valueOf("userInfo2");
                User user2 = User.valueOf("userInfo3");
                System.out.println(user.toString());
                System.out.println(user1.toString());
                System.out.println(user2.toString());
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (ois != null) {
                    ois.close();
                }
                } catch(IOException e){
                    e.printStackTrace();
                }
            try {
                if (br!=null) {
                    br.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (fr!=null) {
                    fr.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

IO流2作业

上机练习1:
▪ 将D盘已存在的文件moring.txt中的内容复制到C:盘根目录
▪ 可以使用InputStream,OutputStream字节流的读写
▪ 也可以使用Reader ,Writer字符流的读写

public class CopyDirectory {
    @Test
    public void test1(){
        File src=new File("d:/moring.txt");
        File dest=new File("c:/moring.txt");
        copy(src,dest);
    }
    public static void copy(File srcDirectory,File destDirectory)  {
        InputStream inputStream=null;
        OutputStream outputStream=null;
        try {
            if (srcDirectory.isDirectory()) {
                if (!destDirectory.exists()) {
                    destDirectory.mkdir();
                }
                String[] list = srcDirectory.list();
                for (String file : list) {
                    File srcFile = new File(srcDirectory, file);
                    File destFile = new File(destDirectory, file);
                    copy(srcFile, destFile);//递归,自己调自己
                }

            } else {//它是一个文件的情况下
                inputStream = new FileInputStream(srcDirectory);
                outputStream = new FileOutputStream(destDirectory);
                //读写操作
                byte[] buffer = new byte[1024];
                int len;
                while ((len = inputStream.read(buffer)) != -1) {
                    outputStream.write(buffer, 0, len);
                }
            }
        }catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (outputStream!=null) {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (inputStream!=null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
            }
        }

上机练习2:
▪ 需求:将http://www.baidu.com的原文件
▪ 以特定的编码方式读取到控制台输出
▪ 核心代码: ▪ URL url=new URL("http://www.baidu.com");
▪ InputStream is=url.openStream();

public class Baidu {
    @Test
    public void test() {
        BufferedReader br = null;
        BufferedWriter bw = null;
        try {
            //openStream():打开与此 URL ,并返回一个 InputStream ,以便从该连接读取。
            br = new BufferedReader(new InputStreamReader(new URL("http://www.baidu.com").openStream(), "utf-8"));
            bw = new BufferedWriter(new FileWriter("baidu.html"));
            String str = "";
            while ((str = br.readLine()) != null) {//readLine()方法是BufferedReader类特有的,到达文件末尾时为null
                bw.write(str);
                bw.flush();
                System.out.println(str);
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }
        finally {
            if (bw!=null) {
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (br!=null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

上机练习3:
使用键盘录入(System.in),将如下诗歌写入文件
《虞美人》
春花秋月何时了?
往事知多少。
小楼昨夜又东风,
故国不堪回首月明中。
雕栏玉砌应犹在,
只是朱颜改。
问君能有几多愁?
恰似一江春水向东流。
再将写入的文件读取到控制台输出System.out。

1.先使用键盘录入(System.in),将诗歌写入文件。

public class InputOutputStreamTest2 {
    public static void main(String[] args) {
        BufferedReader br= null;
        BufferedWriter bw= null;
        try {
            br = new BufferedReader(new InputStreamReader(System.in));
            bw = new BufferedWriter(new FileWriter("poetry.txt"));
            String str="";
            while (!"exit".equals(str)&&!"e".equals(str)){
                str=br.readLine();
                bw.write(str+"\n");
                bw.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bw!=null) {
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (br!=null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

2.再将写入的文件读取到控制台输出System.out。

public class InputOutputStreamTest3 {
    public static void main(String[] args) {
        BufferedReader br= null;
        BufferedWriter bufferedWriter= null;
        try {
            br = new BufferedReader(new FileReader("poetry.txt"));
            bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
            String str="";
            while ((str=br.readLine())!=null){
                bufferedWriter.write(str+"\n");
                bufferedWriter.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bufferedWriter!=null) {
                try {
                    bufferedWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (br!=null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}


上机练习4:
【1】创建User类,包含以下属性name:String,age:int
,gender enum,重写toString方法显示对象的信息
【2】序列化对象到文件
【3】反序化对象,调用
对象的toString方法输出对象的信息
操作要求:初始化几个对象,存入集合,序列化不反序列化集合。

1.创建需要的枚举类User

public enum User implements Serializable{
   // 1.提供当前枚举类的多个对象,对象之间用" , "隔开,末尾使用" ; "
    userInfo1("火钳",18),
    userInfo2("刘明",18);
    //2.声明User对象的属性,private final修饰
    private final  String userName;
    private final  int   age;
    //3.私有化类的构造器,并给对象赋值
     private User(String userName, int age) {
        this.userName = userName;
        this.age = age;
    }
    //4.其他诉求1:获取枚举类对象的属性
    public String getUserName() {
        return userName;
    }
    public int getAge() {
        return age;
    }
    //5.其他诉求2:提供toString()

    @Override
    public String toString() {
        return "User{" +
                "userName='" + userName + '\'' +
                ", age=" + age +
                '}';
    }
}

2.序列化对象到文件

public class ObjectOutputStreamExercise {
    @Test
    public void test(){
        ObjectOutputStream oos= null;
        try {
            //把初始化的对象存入集合
            List<User> list=new ArrayList<User>();
            list.add(User.userInfo1);
            list.add(User.userInfo2);
            oos = new ObjectOutputStream(new FileOutputStream("User.txt"));
            //序列化集合
           oos.writeObject(list);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } finally {
            if (oos!=null) {
                try {
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

3.反序列化对象,调用
对象的toString方法输出对象的信息
操作要求:初始化几个对象,存入集合,序列化不反序列化集合。

public class ObjectInputStreamExercise {
    @Test
    public void test(){
        ObjectInputStream ois= null;
        try {
            //反序列化
            ois = new ObjectInputStream(new FileInputStream("User.txt"));
            //读取对象
            Object o =ois.readObject();
            //强转集合
            List<User> list= (List<User>) o;
            //遍历集合
            for (User user : list) {
                System.out.println(user.toString());
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (ois!=null) {
                try {
                    ois.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}


  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值