11.10字符流的读写,读写二进制文件,序列化简略

//字符流Write的简单使用

        BufferedWriter bw=null;//创建BufferedWriter对象为空
        FileOutputStream fos=null;//创建FileOutputStream对象为空
        OutputStreamWriter ops=null;//创建转型对象
        try {
            fos=new FileOutputStream("d:/remake1.txt");//指定写的文件
            ops=new OutputStreamWriter(fos,"UTF-8");//进行汉字的转换
            bw= new BufferedWriter(ops);//给BufferedWriter重新定义对象
            bw.write("第一次实验");//运用BufferedWriter类的方法进行写入
            bw.write("\n严伟贱说的!!");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();//抛出异常
        }finally {
            try {
                bw.close();
                ops.close();
                fos.close();//关闭字节流
            } catch (IOException e) {
                e.printStackTrace();//抛出关闭异常
            }

        }

一:创建对象的时候可以先创建BufferedWriter类,并且写出对其重新赋新对象的式子,根据式子需求再创建OutputStream类,在对OutputStream类ops中转型的格式一般为UTF-8,并且因为要输入有个转型的对象,所以定义FileOutputStream类,指定所写的文件名(如果文件一开始并不存在,需要加具体的路径)。从而一步步反推把三个式子补写完整,不会有所缺漏。

二:在调用write方法写入时需要注意加入双引号否则会冒红,并且换行时可以输入"\n"或者敲一段

bw.newLine();这样子就可以实行换行

三:在关闭流的时候需要先将bw关闭,将其他抢先关闭,程序无法进行会报错。

    //字符流read的简单使用

public static void test2(){
        BufferedReader br=null;//定义BufferedReader类对象为空
        InputStreamReader isr=null;
        FileInputStream fis=null;
        try {
            fis=new FileInputStream("d:/remake1.txt");
            isr=new InputStreamReader(fis,"UTF-8");//将fis读的文件中的字体转型
            br=new BufferedReader(isr);//重新定义
            String content=null;//定义content为空
       while ((content= br.readLine())!=null){//读出整行内容写入content,并且判断是否为空
                System.out.println(content);//输出content
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fis.close();
                isr.close();
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }


    }

字符流read的使用跟writer差别不是特别大,写法也可以参照writer的写法。比较需要注意的就是定义一个空字符串,并且用循环语句将需要读的文件中的每一行循环导入空字符串中,最后进行打印。我自己在read最后结束流里面并没有发现颠倒顺序会报错

再往后就是reader与writer的结合使用,需要注意的是用writer写一个文件并且在同一方法中再次用reader读该文件时,需要将writer的字节流在reader前结束,否则reader无法读该文件,流已经被占用了,无法进行。

    public static void test4(){
        BufferedReader br=null;
        InputStreamReader isr=null;
        FileInputStream fis=null;
        try {
            fis=new FileInputStream("d:/remake2.txt");
            isr=new InputStreamReader(fis,"UTF-8");
            br=new BufferedReader(isr);
            StringBuffer stringBuffer=new StringBuffer();
            String content=null;
            while ((content= br.readLine())!=null){
                System.out.println(content);
                stringBuffer.append(content);
            }
            String stu=stringBuffer.toString();
            stu = stu.replace("贱", "健");
            System.out.println(stu);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {br.close();
                isr.close();
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

此段代码是writer一个新文件,并且在文件中写入一些内容。然后用reader读该文件,将其读入空字符串。如果想要替换一些内容,需要在循环之前定义一个StringBuffer类的对象,在循环中用StringBuffer的append方法在每次循环时向StringBuffer类的对象中加入每一行内容,然后将StringBuffer对象转成String类型,最后使用String的replace方法将需要替换的地方替换掉。(当然也可以不转换成String类型直接进行内容替换

//对一个图片进行在其他盘中的复制转移  

DataInputStream dis=null;
        FileInputStream fis=null;//定义输入对象
        DataOutputStream dos=null;//定义数据输出流的对象
        FileOutputStream fos=null;//定义输出对象
        try {
            fis=new FileInputStream("./resource/pede.jpg");//给定位置
            dis=new DataInputStream(fis);//转换成二进制数据类型
            fos=new FileOutputStream("pedecopy.jpg");//给定需要复制到的地方
            dos=new DataOutputStream(fos);//再次转成文件输出
            int temp=-1;
            while ((temp=dis.read())!=-1){
                dos.write(temp);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                dos.close();
                dis.close();
                fos.close();
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

DataOutputStreams是数据输出流,实现八种基本类型数据的输出,该方法很便捷方便·,可以将一个盘中的大型文件很快的拷到其他地方。

 未完成的结构图

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值