黑马程序员---2015.6.25java基础笔记---装饰模式--字节流拷贝图片--字节流缓冲--字节字符转化--File类

来源:互联网 发布:哔哩哔哩直播软件 编辑:程序博客网 时间:2024/04/28 01:17

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1.装饰模式比继承要灵活,避免了继承体系臃肿,而且降低了类与类之间的关系

    装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。
    所以装饰类和被装饰类通常都属于一个体系中的。
    
/*    装饰设计模式:    当想要对已有对象功能进行加强时,可以定义类将已有对象传入,基于已有功能,并提供加强功能。    那么自定义的该类称为装饰类        装饰类通常会通过构造方法接收被装饰的对象。    并基于被装饰的对象的功能,提供更强的功能。*/class Person{    public void eat()    {        System.out.println("吃饭、。。。");        }}class SuperPerson{    Person p = null;    SuperPerson(Person p )    {        this.p = p;        }        public void superEat()    {        System.out.println("drink wine");        p.eat();        System.out.println("eat tian dian ");    }}class PersonDemo{    public static void main(String[] args)    {        SuperPerson p = new SuperPerson(new Person());        p.superEat();    }    }


    
2.字符流用于处理文本类不能用于处理图片,MP3等格式。
    而字节流可以处理这些格式。
/*复制一个图片思路:1.用字节读取流对象和图片关联2.用字节写入流对象创建一个图片文件,用于存储获取到的图片数据3.通过循环读写,完成数据的存储4.关闭资源*/import java.io.*;class CopyPic{    public static void main(String[] args)    {        FileInputStream fis = null;        FileOutputStream fos = null;                try        {            fis = new FileInputStream("a.jpg");            fos = new FileOutputStream("a_copy.jpg");            byte[] buff1 = new byte[1024];            int num = 0;            while((num=fis.read(buff1))!=-1)            {                fos.write(buff1,0,num);            }                    }        catch(IOException e)        {            throw new RuntimeException("读取出错了。。");            }        finally        {            try            {                if(fis != null)                {                    fis.close();                }                if(fos != null)                {                    fos.close();                    }            }            catch(IOException e)            {                throw new RuntimeException("关闭资源出错了。。");                }        }        }}



3.
/*    通过字节流缓冲区完成复制*/import java.io.*;class CopyMp3{    public static void main(String[] args)    {        BufferedInputStream bis = null;        BufferedOutputStream bos = null;                try        {            bis = new BufferedInputStream(new FileInputStream("0.mp3"));            bos = new BufferedOutputStream(new FileOutputStream("0_copy.mp3"));            int ch = 0;            while((ch = bis.read())!=-1)            {                bos.write((char)ch);            }        }        catch(IOException e)        {            throw new RuntimeException("读取出错了");        }        finally        {            try            {                if(bis != null)                {                    bis.close();                }                if(bos != null)                {                    bos.close();                    }            }            catch(IOException e)            {                throw new RuntimeException("关闭资源出错了。。");                }        }        }}


4.字符流
        FileReader,FileWriter
        BufferedReader,BufferedWriter
    字节流
        FileInputStream,FileOutputStream
        BufferedInputStream,BufferedOutputStream    
        
    键盘录入一行数据,并打印。发现其实就是读一行数据的原理。
    也就是readLine()方法。
    能不能直接使用readLine方法来完成键盘录入的一行数据的读取呢?
    readLine方法是字符流BufferedReader类中的方法。
    而键盘录入的read是InputStream的方法。
    
5.键盘录入。
        StringBuilder缓冲区清零的方法:sb.delete(0,sb.length());    
        /*    读取键盘录入。    System.out:对应的是标准输出设备,控制台。    System.in:对应的标准输入设备:键盘。    键盘录入,录入一行就打印,当录入over就结束*/import java.io.*;class ReadIn{    public static void main(String[] args) throws IOException    {        //获取键盘输入数据        InputStream in = System.in;        int temp = 0;        //定义缓冲区,将每一行键盘录入的数据存入缓冲区中        StringBuilder sb = new StringBuilder();        while(true)        {            temp = in.read();            if(temp == '\r')                continue;            if(temp == '\n')                {                //如果输入一行是over就接收程序                if("over".equals(sb.toString()))                {                    System.out.println(sb.toString());                    break;                }else                {                    //输出一行录入的数据并,将缓冲区清零。                    System.out.println(sb.toString());                    sb.delete(0,sb.length());                }                }    else            {                sb.append((char)temp);            }        }    }}



6.字节转化为字符
/*    InputStreamReader 是字节流通向字符流的桥梁    OutputStreamWriter是字符流通向字节流的桥梁*/import java.io.*;class TransStreamDemo{    public static void main(String[] args) throws IOException    {        //获取键盘录入        InputStream in = System.in;        //字节流转化为字符流        InputStreamReader isr = new InputStreamReader(in);        //使用缓冲区,提高效率        BufferedReader br = new BufferedReader(isr);                //将字符流转坏为字节流输出到屏幕        OutputStream os = System.out;        OutputStreamWriter osw = new OutputStreamWriter(os);        BufferedWriter bufw = new BufferedWriter(osw);                String temp = null;                while((temp=br.readLine())!=null)        {            if("over".equals(temp))                break;            bufw.write(temp.toUpperCase());            bufw.newLine();            bufw.flush();        }    }}


7.子节流转化为字符流的简写:
        BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
    字符流转化为字节流的简写:
        BufferedWriter bufr = new BufferedWriter(new OutputStreamWriter(System.out));
8. 需求:把键盘录入的数据存储到一个文件中
                BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
                BufferedWriter bufr = new BufferedWriter(new FileOutputStream("out.txt"));
     需求:把一个文件数据打印在控制台上。        
                BufferedReader bufr = new BufferedReader(new FileInputStream("xxx.txt"));
                BufferedWriter bufr = new BufferedWriter(new OutputStreamWriter(System.out));
    
9.流操作的基本规律
    ---1,明确源和目的
                源:输入流,InputStream  Reader
                目的:输出流,OutputStream Writer
    ---2,操作的数据是否为纯文本
                是,字符流
                否,字节流
    ---3,当体系明确后,再确定具体使用哪个对象
    
    ---4,FileWriter是使用的默认码表GBK
    
10.    转换流什么时候使用?
            字符和字节之间的桥梁,通常涉及到字符编码转换时,需要用到转换流。
                OutputStreamWriter(OutputStream out, String charsetName) //UTf-8,GBK
                
11.异常的日志信息
/*    异常的日志信息    思路:e.printStackTrace(System.out) == e.printStackTrace();                而System.setOut(PrintStream out); 这样就可以将错误信息存入一个指定的文件中。*/import java.text.*;import java.io.*;import java.util.*;class ExceptionInfo{    public static void main(String[] args)    {        PrintStream ps = null;        try        {            int[] a = new int[2];            System.out.println(a[2]);        }catch(Exception e)        {            try            {                //创建错误日志                ps= new PrintStream("log.txt");                //获取当前时间,并进行转化格式                Date d = new Date();                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss");                String date = sdf.format(d);                //将时间字符串输入日志中                ps.println(date);                //重新设置输出流                System.setOut(ps);                e.printStackTrace(System.out);            }            catch(IOException ex)            {                throw new RuntimeException("日志创建失败");            }            finally            {                try                {                    if(ps != null)                    {                        ps.close();                        }                }                catch(RuntimeException exx)                {}            }                    }    }}        



12.//利用IO流将系统信息打印到指定文件
import java.util.*;import java.io.*;class SystemInfo{    public static void main(String[] args) throws IOException    {        Properties p = System.getProperties();        p.list(new PrintStream("systemInfo.txt"));    }}    



13.    File类普通方法的演示
/*File类的演示1.创建    boolean createNewFile(); 在指定位置创建文件,如果该文件已存在,则不创建,返回false                        File f = new File("a.txt");不会创建出对象,只有执行了createNewFile()才可以                        和输出流不一样,输出流对象一创建文件,如果文件存在,会被覆盖                            boolean mkdir()创建文件夹    boolean mkdirs()创建多级目录2.删除    boolean delate();  删除失败返回false。如果文件正在被使用,则删除不了返回falsel    void deleteOnExit() 在程序退出时,删除指定文件3.判断        isFile() 文件是否存在        isHidden() 是否为隐藏文件        isAbsolute() 是否为绝对路径        isDirectory() 是否是一个目录4.获取信息        f2.renameTo(f1);*/import java.io.*;class FileDemo{    public static void main(String[] args)throws IOException    {        //consMethod();        method_5();    }        //创建File对象    public static void consMethod() throws IOException    {        //将a.txt封装成file对象,可以将已有的和未出现的文件或者文件夹封装成对象。        File f1 = new File("d.txt");        File f2 = new File("c:\\abc","b.txt");                File f3 = new File("c:\\abcc");                File f4 = new File(f3,"c.txt");                //separator 与系统有关的默认分割符        File f5 = new File("c:"+File.separator+"d.txt");                sop("f1:"+f1);        sop("f2:"+f2);        sop("f3:"+f3);        sop("f4:"+f4);        sop("f5:"+f5);    }        public static void sop(Object obj)    {        System.out.println(obj);    }        public static void method_1() throws IOException    {        File f = new File("aa\\a.txt");                sop(f.createNewFile());        sop(f.delete());    }        public static void method_2() throws IOException    {        File f = new File("FileDemo.java");            //sop("是否存在?"+f.exists());        //sop("可执行?"+f.canExecute());        File f1 = new File("abcd");        File f2 = new File("abc\\cc\\dd\\ff\\ee\\cc");        sop("是否创建目录"+f1.mkdir());        sop("是否创建多级目录"+f2.mkdirs());    }        public static void method_3() throws IOException    {        File f = new File("hello.java");        f.createNewFile();        sop("文件?"+f.isFile());                File f1 = new File(".java");        sop("文件?"+f.isFile());        sop("绝对路径?"+f1.isAbsolute());        sop("目录?"+f1.isDirectory());    }        public static void method_4() throws IOException    {        File f = new File("c\\e.java");            sop("获取相对路径"+f.getPath());//即获取括号内的内容        sop("获取绝对路径"+f.getAbsolutePath());        //返回的是绝对路径中的父目录,如果获取的是相对路径,则返回null        //如果相对路径中有上层目录,那么该目录就是返回结果        sop("获取此目录的父目录"+f.getParent());    }        public static void method_5() throws IOException    {        File f1 = new File("d:\\Test.txt");            File f2 = new File("c:\\Hello.txt");        /*            相当于剪切,并且可以重命名            将d盘下的Test.txt剪切到c盘下,并且重命名为Hello.txt        */        sop(f1.renameTo(f2));    }}


    
14.File类List方法的演示
import java.io.*;class FileDemo2{    public static void main(String[] args)throws IOException    {        ListDemo();    }        //File对象必须是封装了一个目录,该目录必须存在    public static void ListDemo()    {        //如果文件d.txt下面没有其他文件,则输出空        File f = new File("f:\\d.txt");        String[] lists = f.list();        for(String s:lists)        {            sop(s);            }    }        //列出所有盘符    public static void listRoots()      {        File[] f1 = File.listRoots();        for(File f:f1)        {            sop(f);            }        }        public static void sop(Object obj)    {        System.out.println(obj);    }}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 浴盆下水盖坏了怎么办 冒险岛勋章多了怎么办 玉手镯取不下来怎么办?终极绝招! 陆金所收益低怎么办 陆金所登录密码忘记怎么办 陆金所理财逾期怎么办 死亡家属晚上来闹怎么办 开车撞到人家属闹要请护工怎么办 骑马与砍杀战团打下城市怎么办 我的脑子有问题怎么办 公司外派异地工作医保怎么办 老鼠死在墙里面怎么办 父亲再婚婚后对我不好怎么办 皮衣搽了护理油后不亮了怎么办 新买的衣服皱了怎么办 新买的裙子很皱怎么办 新买的风衣很皱怎么办 新买的裙子皱了怎么办 货拉拉准点率低怎么办 定机票名字打错了怎么办 做坏事被发现了怎么办 在阳台做被发现怎么办 有秘密被发现了怎么办 微店没有收到货怎么办 cf与主机连接不稳定怎么办 穿越火线与主机连接不稳定怎么办 word被锁定无法编辑怎么办 平衡车系统乱了怎么办 监控老是滴滴的响怎么办 磁盘已满 文件未保存怎么办 cocos只有代码没有项目怎么办 电脑系统管理员密码忘记了怎么办 魔兽小队不显示职业颜色怎么办 魔兽多余的橙装怎么办? f117-f6不读硬盘怎么办 中飞院飞行学生停飞了怎么办 军人对你敬礼时怎么办 小孩抱着就睡放下就醒怎么办 着火了怎么办 我的世界 生存战争2感冒了怎么办 生存战争2吐了怎么办