day20_System+Runtime+Math+Date+Calender+IO流

01-其他对象API(System类)

/*

         * System:类中的方法和属性都是静态的。

         *

         *

         * 常见方法:

         * long currentTimeMillis();获取当前时间的毫秒值。

         *

         */

       

//      long l1 =1335664696656l;//System.currentTimeMillis();

//      System.out.println(l1/1000/60/60/24);//1335664696656

//      code..

//      long l2 =System.currentTimeMillis();

//      System.out.println(l2-l1);

 

       

        System.out.println("hello-"+LINE_SEPARATOR+" world");

//      demo_1();

        //给系统设置一些属性信息。这些信息是全局,其他程序都可以使用。

//      System.setProperty("myclasspath","c:\myclass");

       

    }

   

    public static void demo_1(){

        //获取系统的属性信息,并存储到了Properties集合中。

        /*

         * properties集合中存储都是String类型的键和值。

         * 最好使用它自己的存储和取出的方法来完成元素的操作。

         */

        Properties prop =System.getProperties();

       

        Set<String>nameSet = prop.stringPropertyNames();

       

        for(String name : nameSet){

            String value = prop.getProperty(name);

           

            System.out.println(name+"::"+value);

        }

       

    }

小知识点说一下:Properties是不是hashTable的子类啊,我们怎么来迭代这个Properites也,它既然是HashTable 的子类,那HashTable是怎么迭代了,那HashTable的方法它是不是继承过来了啊,所以也它这个HashTable是怎么迭代的,这个Properties也怎么迭代就可以了啊,这是一种思想,既然它是它的子类,父类有的方法,子类是不是也有啊,思想,思想

 

02-其他对象API(Runtime类)


这里面运行为什么会出错也,那是因为在当前目录如果没有找到,它就会到path路径下去找,path路径下有,它就执行了,没有所以也没有执行,如果你使用绝对路径也是可以了c:/pargrongfile/qq/qq.exe也是可以的



/*

         * Runtime:没有构造方法摘要,说明该类不可以创建对象。

         * 又发现还有非静态的方法。说明该类应该提供静态的返回该类对象的方法。

         * 而且只有一个,说明Runtime类使用了单例设计模式。

         *

         */

       

        Runtime r = Runtime.getRuntime();

       

//      execute: 执行。xxx.exe

       

        Process p = r.exec("notepad.exe");

        Thread.sleep(5000);

        p.destroy();

 

03-其他对象API(Math类)

/*

         * Math:提供了操作数学运算的方法。都是静态的。

         *

         * 常用的方法:

         * ceil():返回大于参数的最小整数。

         * floor():返回小于参数的最大整数。

         * round():返回四舍五入的整数。

         * pow(a,b):a的b次方。

         *

         */

        double d1 = Math.ceil(12.56);

        double d2 = Math.floor(12.56);

        double d3 = Math.round(12.46);

       

//      sop("d1="+d1);

//      sop("d2="+d2);

//      sop("d3="+d3);

       

//      double d = Math.pow(10,2);

//      sop("d="+d);

       

        Random r = new Random();

        for (int i = 0; i < 10; i++) {

           

//          double d = Math.ceil(Math.random()*10);

//          double d = (int)(Math.random()*6+1);

//          double d = (int)(r.nextDouble()*6+1);

            int d = r.nextInt(6)+1;

            System.out.println(d);

        }

    }

 

    public static void sop(String string) {

        System.out.println(string);

    }

 

04-其他对象API(Date类)

这个要求大家必须会了

/**

     * 日期对象和毫秒值之间的转换。

     *

     * 毫秒值-->日期对象 :

     * 1,通过Date对象的构造方法 new Date(timeMillis);

     *  2,还可以通过setTime设置。

     *  因为可以通过Date对象的方法对该日期中的各个字段(年月日等)进行操作。

     * 

     *

     * 日期对象-->毫秒值:

     * 2,getTime方法。

     * 因为可以通过具体的数值进行运算。

     *

     *

     */

    public static void methodDemo_1() {

        long time = System.currentTimeMillis();//

//      System.out.println(time);//1335671230671

       

        Date date = new Date();//将当前日期和时间封装成Date对象。

        System.out.println(date);//Sun Apr 29 11:48:02 CST 2012

       

        Date date2 = new Date(1335664696656l);//将指定毫秒值封装成Date对象。

        System.out.println(date2);

    }

05-其他对象API(Date类-日期对象转成字符串)

/**

     * 对日期对象进行格式化。

     * 将日期对象-->日期格式的字符串。

     * 使用的是DateFormat类中的format方法。

     *

     *

     *

     *

     *

     *

     */

    public static void methodDemo_2() {

       

        Date date = new Date();

       

        //获取日期格式对象。具体着默认的风格。 FULL LONG等可以指定风格。

        DateFormat dateFormat =DateFormat.getDateInstance(DateFormat.LONG);

        dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);

//      System.out.println(dateFormat);

       

        //如果风格是自定义的如何解决呢?

        dateFormat = new SimpleDateFormat("yyyy--MM--dd");

       

        String str_date = dateFormat.format(date);

       

        System.out.println(str_date);

    }

 

06-其他对象API(Date类-字符串转成日期对象)

/**

     * 将日期格式的字符串-->日期对象。

     * 使用的是DateFormat类中的parse()方法。

     *

     * @throws ParseException

     */

    public  static void methodDemo_3() throws ParseException {

       

        String str_date = "2012年4月19日";

        str_date = "2011---8---17";

       

               

        DateFormat dateFormat =DateFormat.getDateInstance(DateFormat.LONG);

       

        dateFormat = new SimpleDateFormat("yyyy---MM---dd");

       

       

        Date date =dateFormat.parse(str_date);

       

        System.out.println(date);

       

       

    }

07-其他对象API(Date类-练习)

/* 练习:

 * "2012-3-17"到"2012-4-6"

 * 中间有多少天?

 * 思路:

 * 两个日期相减就哦了。

 * 咋减呢?

 * 必须要有两个可以进行减法运算的数。

 * 能减可以是毫秒值。如何获取毫秒值?通过date对象。

 * 如何获取date对象呢?可以将字符串转成date对象。

 *

 * 1,将日期格式的字符串转成Date对象。

 * 2,将Date对象转成毫秒值。

 * 3,相减,在变成天数

 *

 *

 */

 

public class DateTest {

 

    /**

     * @param args

     * @throws ParseException

     */

    public static void main(String[] args) throws ParseException {

 

        String str_date1 = "2012-3-17";

        String str_date2 = "2012-4-18";

        test(str_date1,str_date2);

    }

 

    public static void test(Stringstr_date1,String str_date2) throws ParseException {

       

        //1,将日期字符串转成日期对象。

        //定义日期格式对象。

        DateFormat dateFormat =DateFormat.getDateInstance();

        dateFormat = new SimpleDateFormat("yyyy-MM-dd");

       

        Date date1 =dateFormat.parse(str_date1);

        Date date2 =dateFormat.parse(str_date2);

       

        long time1 = date1.getTime();

        long time2 = date2.getTime();

       

        long time = Math.abs(time1-time2);

       

       

        int day = getDay(time);

        System.out.println(day);

       

    }

 

    private static int getDay(long time) {

       

        int day = (int)(time/1000/60/60/24);

       

        return day;

    }

 

08-其他对象API(Calendar类-基本演示)

面试题,任何一年中的2月有多少天,这就是Calendar中set()和add,方法的使用,那我就设置3月一号,然后设置偏移量也就是减一,那就是二月的最后一天

public static void main(String[] args) {

 

        Calendar c =Calendar.getInstance();

       

        int year = 2012;

        showDays(year);

    }

 

    /**

     * @param c

     */

    public static void showDays(int year) {

       

        Calendar c = Calendar.getInstance();

        c.set(year, 2, 1);

       

        c.add(Calendar.DAY_OF_MONTH, -1);

       

        showDate(c);

    }

01-IO流(输入流&输出流)

输入,输出是相对内存而的言,如果你是把东西读入到内存就是输入,如果你是将内存中的数据写入到硬盘中就是输出


输入流和输出流相对于内存设备而言.

 

将外设中的数据读取到内存中:输入

将内存的数写入到外设中:输出。

 

 

02-IO流(字节流&字符流)

输入流和输出流相对于内存设备而言.

 

将外设中的数据读取到内存中:输入

将内存的数写入到外设中:输出。

 

 

字符流的由来:

其实就是:字节流读取文字字节数据后,不直接操作而是先查指定的编码表。获取对应的文字。

在对这个文字进行操作。简单说:字节流+编码表

 

03-IO流(字符流-FileWriter)



字节流的两个顶层父类:

1,InputStream  2,OutputStream.

 

字符流的两个顶层父类:

1,Reader 2,Writer

 

这些体系的子类都以父类名作为后缀。

而且子类名的前缀就是该对象的功能。

 

 

 

 

 

就从熟悉的文字开始字符流,

 

 

//需求:将一些文字存储到硬盘一个文件中。

记住;如果要操作文字数据,建议优先考虑字符流。

而且要将数据从内存写到硬盘上,要使用字符流中的输出流。Writer

硬盘的数据基本体现是文件。希望找到一个可以操作文件的Writer.

 

找到了FileWriter

 

//创建一个可以往文件中写入字符数据的字符输出流对象。

        /*

         * 既然是往一个文件中写入文字数据,那么在创建对象时,就必须明确该文件(用于存储数据的目的地)。

         *

         * 如果文件不存在,则会自动创建。

         * 如果文件存在,则会被覆盖。

         *

         * 如果构造函数中加入true,可以实现对文件进行续写!

         */

        FileWriter fw = new FileWriter("demo.txt",true);

       

        /*

         * 调用Writer对象中的write(string)方法,写入数据。

         *

         * 其实数据写入到临时存储缓冲区中。

         *

         */

        fw.write("abcde"+LINE_SEPARATOR+"hahaha");

//      fw.write("xixi");

       

        /*

         * 进行刷新,将数据直接写到目的地中。

         */

       

//      fw.flush();

       

        /*

         * 关闭流,关闭资源。在关闭前会先调用flush刷新缓冲中的数据到目的地。

         */

        fw.close();

       

//      fw.write("haha");// java.io.IOException: Streamclosed

 

FileWriterDemo.java

04-IO流(字符流-FileWriter-细节(换行和续写))

05-IO流(字符流-FileWriter-IO异常处理)

FileWriter fw = null;

        try {

 

            fw = new FileWriter("k:\\demo.txt");

 

            fw.write("abcde" + LINE_SEPARATOR + "hahaha");

 

        } catch (IOException e) {

            System.out.println(e.toString());

        } finally {

            if (fw != null)

                try {

                    fw.close();

                } catch (IOException e) {

                    // code....

                    throw new RuntimeException("关闭失败");

                }

        }

06-IO流(字符流-FileReader-读取方式一)

 

//1,创建读取字符数据的流对象。

        /*

         * 在创建读取流对象时,必须要明确被读取的文件。一定要确定该文件是存在的。

         *

         * 用一个读取流关联一个已存在文件。

         */

        FileReader fr = new FileReader("demo.txt");

       

        int ch = 0;

       

        while((ch=fr.read())!=-1){

            System.out.println((char)ch);

        }

       

        /*

        //用Reader中的read方法读取字符。

        int ch =fr.read();

        System.out.println((char)ch);

        int ch1 =fr.read();

        System.out.println(ch1);

        int ch2 =fr.read();

        System.out.println(ch2);

        */

       

        fr.close();

 

07-IO流(字符流-FileReader-读取方式二)

FileReader fr = new FileReader("demo.txt");

       

        /*

         * 使用read(char[])读取文本文件数据。

         * 

         * 先创建字符数组。

         */

        char[] buf = new char[1024];

       

        int len = 0;

       

        while((len=fr.read(buf))!=-1){

            System.out.println(new String(buf,0,len));

        }

       

        /*

        int num =fr.read(buf);//将读取到的字符存储到数组中。

        System.out.println(num+":"+newString(buf,0,num));

        int num1 =fr.read(buf);//将读取到的字符存储到数组中。

        System.out.println(num1+":"+newString(buf,0,num1));

        int num2 =fr.read(buf);//将读取到的字符存储到数组中。

        System.out.println(num2+":"+newString(buf));

        */


day20 学习结果

 

1,日期类和日历类。

    日期对象Date和毫秒值之间的转换,以及什么时候用?

    日期对象Date和日期格式的字符串之间的转换,以及什么时候用?

    并明确多涉及的方法。完成练习。

   

    练习:

    2012/2/16-2012/3/5有多天?

   

    日历类的日期的设置,获取,偏移。

   

2,输入流和输出流的流向的理解?

 

3,字符流的理解,由来和作用?

 

4,什么时候使用流对象?

 

5,对字符流中的具体操作文件的流对象进行熟悉?

    并明确每一个操作步骤和原理。

   

6,复制文件的原理和代码。

 

7,IO异常的处理方式每一个步骤要理解?

 

8,缓冲区的基本思想?提高效率的原理。

 

 

作业:将c盘的一个文本文件复制到d盘。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值