黑马程序员技术交流社区

标题: java基础五-工具类和IO [打印本页]

作者: 清风木扬    时间: 2014-3-27 11:27
标题: java基础五-工具类和IO
一,工具类
   
   1.Math
      abs() 绝对值  
      ceil()  大于它的最小整数  ceil(1.5) //2.0
      floor() 小于它的最大整数  floor(1.5) //1.0
      round() 四舍五入          round(1.5) //1
      pow(,)  幂运算            pow(10,2)//100
      random() 0到1的随机数
  2.Runtime(运行可执行文件)
      该类没有提供构造函数,Runtime.getRuntime()得到对象。
      Runtime r = Runtime.getRuntime();
      Process p = r.exec("notepad.exe  SystemDemo.java");
  3.System
    setOut()设定输出流。
    Properties getProperties()获取系统属性信息
    //Properties 是HashTable的子类,
        Properties prop = System.getProperties();         
        for(Object obj : prop.keySet())
        {
            String value = (String)prop.get(obj);

            System.out.println(obj+"::"+value);
        }

   
    System.setProperty(key, value)
    System.getProperty(key);
  4.Calendar
   Calendar c=Calendar.getInstance();//指定时区和语言环境获得一个日历
   System.out.println(c.get(c.HOUR_OF_DAY));// 返回给定日历字段的值

    Calendar c=Calendar.getInstance();
      
      c.set(c.YEAR, 2012);
      c.set(c.MONTH,0);
      c.set(c.DAY_OF_MONTH,1);
      c.add(c.DAY_OF_YEAR,-1);
      
      SimpleDateFormat sdf=new SimpleDateFormat("yyyy MM dd");
      System.out.println(sdf.format(c.getTime()));
      System.out.println(c.get(c.DAY_OF_MONTH));   
二。IO
   1.IO主要类
    字符流
    Reader
           FileReader   
           BufferedReader
           InputStreamReader(将字节流转成字符流)
    Writer  
           FileWriter
           BufferedReader   
           OutputStreamWriter(将字节流转成字符流)
    字节流
    InputStream   read()     read(byte[] )
           FileInputStream  
           BufferedInputStream
    OutputStream
           FileOutputStream   available() 文件可读剩余字节数
           BufferedOutputStream

   2. Reader类中  read()与read(char[] cbuf)的区别
    int read() 读取单个字符,当返回-1时就读完了
    int read(char[] cbuf) 读取的值放在数组中,返回的是读取的字符个数,当返回-1时就读完了
  
   3.Writer类中 flush()与close()
     flush()刷新流对象中的缓冲中的数据,将数据刷到目的地中。
     close()关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据,将数据刷到目的地中。
     和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。
   
   4.new FileWriter("demo.txt");/该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。

   5.流操作的基本规律
      明确源和目的。
    源:输入流。InputStream  Reader
    目的:输出流。OutputStream  Writer。
      操作的数据是否是纯文本。
    是:字符流。
    不是:字节流。

       当体系明确后,在明确要使用哪个具体的对象。
    通过设备来进行区分:
    源设备:内存,硬盘。键盘
    目的设备:内存,硬盘,控制台。
   6.模拟Buffere与Readln
    class MyBufferedInputStream
    {
    private InputStream in;

    private byte[] buf = new byte[1024*4];
        
    private int pos = 0,count = 0;
   
    MyBufferedInputStream(InputStream in)
    {
        this.in = in;
    }

    //一次读一个字节,从缓冲区(字节数组)获取。
    public int myRead()throws IOException
    {
        //通过in对象读取硬盘上数据,并存储buf中。
        if(count==0)
        {
            count = in.read(buf);
            if(count<0)
                return -1;
            pos = 0;
            byte b = buf[pos];

            count--;
            pos++;
            return b&255;
        }
        else if(count>0)
        {
            byte b = buf[pos];

            count--;
            pos++;
            return b&0xff;
        }
        return -1;

    }
    public void myClose()throws IOException
    {
        in.close();
    }
      }
  
class  ReadIn
  {
    public static void main(String[] args) throws IOException
    {
        InputStream in = System.in;
        StringBuilder sb = new StringBuilder();

        while(true)
        {
            int ch = in.read();
            if(ch=='\r')
                continue;
            if(ch=='\n')
            {
                String s = sb.toString();
                if("over".equals(s))
                    break;
                System.out.println(s.toUpperCase());
                sb.delete(0,sb.length());
            }
            else
                sb.append((char)ch);

        }
    }
   }
    7.装饰设计(吃饭)
      装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。
      所以装饰类和被装饰类通常是都属于一个体系中的。

三.基它IO类

   File
    创建。
    boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
                        和输出流不一样,输出流对象一建立创建文件。
                                                而且文件已经存在,会覆盖。

    boolean mkdir():创建文件夹。
    boolean mkdirs():创建多级文件夹。
    删除。
    boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回falsel。
    void deleteOnExit();在程序退出时删除指定文件。


    判断。
    boolean exists() :文件是否存在.
    isFile():
    isDirectory();
    isHidden();
    isAbsolute();

    获取信息。
    getName():
    getPath():
    getParent():

    getAbsolutePath()
    long lastModified()
    long length()
   
      /*
       File dir = new File("c:\\");
    File[] files = dir.listFiles();

    for(File f : files)
    {
        System.out.println(f.getName()+"::"+f.length());
    }
      */
      /*
      File dir = new File("d:\\java1223\\day18");

        String[] arr = dir.list(new FilenameFilter() //文件过滤器
        {
            public boolean accept(File dir,String name)
            {

                              //System.out.println("dir:"+dir+"....name::"+name);
                /*
                if(name.endsWith(".bmp"))
                    return true;
                else
                return false;
                */
                return name.endsWith(".bmp");

            }
        });


        System.out.println("len:"+arr.length);
        for(String name : arr)
        {
            System.out.println(name);
        }

     */
     打印流:
    该流提供了打印方法,可以将各种数据类型的数据都原样打印。

    字节打印流:
    PrintStream
    构造函数可以接收的参数类型:
     1,file对象。File
     2,字符串路径。String
     3,字节输出流。OutputStream



     字符打印流:
     PrintWriter
     构造函数可以接收的参数类型:
      1,file对象。File
      2,字符串路径。String
      3,字节输出流。OutputStream
      4,字符输出流,Writer。

   合并流  SequenceInputStream
   Vector<FileInputStream> v = new Vector<FileInputStream>();
    v.add(new FileInputStream("c:\\1.txt"));
        v.add(new FileInputStream("c:\\2.txt"));
        v.add(new FileInputStream("c:\\3.txt"));

        Enumeration<FileInputStream> en = v.elements();

        SequenceInputStream sis = new SequenceInputStream(en);

        FileOutputStream fos = new FileOutputStream("c:\\4.txt");

        byte[] buf = new byte[1024];

        int len =0;
        while((len=sis.read(buf))!=-1)
        {
            fos.write(buf,0,len);
        }

        fos.close();
        sis.close();


作者: 许庭洲    时间: 2014-4-1 13:48
值得学习ing!
作者: 向阳泪无痕    时间: 2014-4-3 09:35
路过 学习。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2