继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

第55节:Java当中的IO流-时间api(下)-上

慕姐8265434
关注TA
已关注
手记 1268
粉丝 222
获赞 1065

webp

标题图

Java当中的IO流(下)-上

日期和时间

日期类:java.util.Date

系统时间:

long time = System.currentTimeMillis();
public class DateDemo {
 public static void main(String[] args){  long time = System.currentTimeMillis();
  System.out.println(time);

 }
}

currentTimeMillis

public static long currentTimeMillis()

currentTimeMillis是用来返回当前时间的,单位以毫秒,其值的粒度取决于底层操作系统.它是与在1970年1月1日UTC之间的当前时间和午夜之间的差异.

UTC世界时

阅读api,类Date

java.lang.Object-> java.util.Date

实现的接口:

Serializable, Cloneable, Comparable<Data>

从以下版本开始
JDK1.0

public class Date extends Objectimplements Serializable, Cloneable, Comparable<Data>

Date有两个附加功能,可以将日期解释为年,月,日,小时,分钟和第二个值,允许格式化和解析日期字符串。但是,从JDK 1.1开始, 要用Calendar类实现在日期和时间字段之间进行转换,并且使用DateFormat类应用于格式化和解析日期字符串, Date中的相应的方法被弃用。

Calendar
DateFormat

一天 = 24 * 60 * 60 = 86400

年,月,日期,小时,分钟,秒值

年份从整数 y - 1900 表示。
月份从 0到11 的整数表示。
0是1月,1是2月,等等;
日期从 1到31 的整数表示。

小时由0到23的整数表示。
分钟由0到59的整数表示。
一般以0到59的整数表示。
秒针由0到61的整数表示。

webp

注意

Date构造方法:

Date()
用来分配Date对象,并且进行初始化对象,时间测量到最近的毫秒Date(long, date)
用来分配Date对象,并且进行初始化对象,时间为标准基准时间以后指定毫秒数

使用Date,创建日期对象,封装对象,进行解析毫秒值

import java.text.DateFormat;import java.util.Date;public class DateDemo {
    public static void main(String[] args) {        long time = System.currentTimeMillis();
        System.out.println(time);

        Date date = new Date(time);
        System.out.println(date.toString());

    }
}

toString()为将 Date对象转换为 String的形式
dow mon dd hh:mm:ss zzz yyyy

webp

注意

日期格式化 DateFormat

DateFormat是日期和时间格式化子类的抽象类,常用SimpleDateFormat,格式化为日期到文本,解析为文本到日期,并且此类提供了很多类方法,(静态方法)

格式化分很多风格分别为,FULL,LONG,MEDIUM和SHORT.

java.text类 DateFormatjava.lang.Object-> java.text.Format-> java.text.DateFormatpublic abstract class DateFormat extends Format

DateFormat提供了很多类方法,不需要子类,只需要它提供的很多类方法,就可以进行格式化风格,DateFormat为日期格式化对象,可以通过类方法得到日期格式器.

myString = DateFormat.getDateInstance().format(myDate);

DateFormat.format(Date date)
DateFormat.getDateInstance().format(myDate);
风格化:FULL、LONG、MEDIUM(默认风格)和 SHORT

long time = System.currentTimeMillis();Date date = new Date(time);

DateFormat dateFormat = DateFormat.getDateInstance();String myString = dateFormat.format(date);

System.out.println(myString);

风格化:

DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);
dateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);

Class DateFormat

webp

注意

Demo案例:

import java.text.DateFormat;import java.util.Date;public class DateDemo {
    public static void main(String[] args) {        long time = System.currentTimeMillis();
        Date date = new Date(time);
        System.out.println(date.toString());

        DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);
        dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
        String mydate = dateFormat.format(date);
        System.out.println(mydate);
    }
}

IO流

Input  Output

IO流是用来处理设备之间的数据传输,在Java中数据的传输是通过流的方式进行操作的,在Java中提供了java.io包用于操作流的对象.

File

File类是将文件或者文件夹进行封装成对象的,为了方便对文件或者文件夹进行操作.

什么是递归呢?

递归就是自己调用自己,就是可以把某功能重复使用.

输入流为读,输出流为写

要输入,进行读入
要输出,进行写出

流可以分字节流和字符流哦~

字节流的抽象类:

InputStream ,OutputStream

子类FileInputStream
子类FileOutputStream

字符流的抽象列:

Reader , Writer

子类FileReader
子类FileWriter

IO流的操作,导入IO包,进行IO异常处理,对流进行关闭

字符流FileWriter 操作:

我们要进行创建流对象,就是建立数据存放的文件

FileWriter fw = new FileWriter("dashu.txt");

然后进行写入的方法,一定要用write()方法,将数据写入:

fw.write("简书作者: 达叔小生");

最后一定不要忘记,关闭流资源哦~

fw.close()

这样就可以在文本中写入数据了,字符流创建文件.

字符流FileReader 操作:

首先我们要指定文件数据读取的对象,建立一个流对象:

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

然后创建一个临时存放的数据的数组对象:

// 因为是字符char[] ch = new char[1024];

然后进行读取方法,要用到read()方法,将流中的数据进行读取到数组中:

fr.read(ch);

最后一定不要忘记,关闭流资源哦~

fr.close()

FileReader 读取:

FileReader fr = new FileReader("dashucoding.txt");char[] ch = new char[1024];int len = 0;while((len=fr.read(ch)) != -1){
 System.out.println(new String(ch,0,len));
}

高效率-字符流缓冲区的帮助

有了缓冲区可以对数据的读和写的效率大大提高了.

BufferedWriter
BufferedReader
BfferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

转换流- InputStreamReader,OutputStreamWriter

转换流是字符流和字节流之间转换的桥梁,方便了字符流和字节流之间的操作
转换流的应用场景为当字节流中的数据都是字符时,可以转成字符流进行操作,更加方便快捷.

字符流体系

字符流

(Reader, Writer)
(Reader -> BufferedReader, InputStreamReader)
(Writer -> BufferedWriter, OutputStreamWriter )
FileReader, FileWriter

字节流体系

字节流

(InputStream, OutputStream)
(InputStream -> FileInputStream, FilterInputStream)
(OutputStream -> FilterOutputStream, FileOutputStream)
BufferedInputStream, BufferedOutputStream

抽象类Calendar

JDK1.1开始,使用Calendar类实现日期和时间字段之间的转换,然后使用DateFormat类来进行格式化和解析日期字符串.

java.util
类 Calendar

java.lang.Object
-> java.util.Calendarpublic abstract class Calendar extends Objectimplements Serializable, Cloneable, Comparable<Calendar>

Calendar提供了一些字段:

YEAR, MONTH, DAY_OF_MONTH, HOURCalendar.YEARCalendar.MONTHCalendar.DAY_OF_MONTHCalendar.HOUR

操作字段:set(),add()和roll(),使用这些方法可以更改日历字段,获取和设置日历字段值,可以调用set()方法,可以使用get,getTimeInMillis,getTime,add和roll进行调用.

Calendar提供了一个类方法getInstance:

Calendar rightNow = Calendar.getInstance();// 获取日历对象

JDK1.1开始就使用这类,不使用Date类了,Calendar 案例:

import java.util.Calendar;public class DateDemo {
    public static void main(String[] args) {

        Calendar c = Calendar.getInstance();        // System.out.println(c);
        // 获取年
        System.out.println(c.get(Calendar.YEAR));
    }
}

搞定年月日

import java.util.Calendar;public class DateDemo {
    public static void main(String[] args) {

        Calendar c = Calendar.getInstance();        int year = c.get(Calendar.YEAR);        int month = c.get(Calendar.MONTH)+1;        int day = c.get(Calendar.DAY_OF_MONTH);

        System.out.println(year+"年"+month+"月"+day+"日");
    }
}

搞定星期

import java.util.Calendar;public class DateDemo {
    public static void main(String[] args) {

        Calendar c = Calendar.getInstance();        int year = c.get(Calendar.YEAR);        int month = c.get(Calendar.MONTH)+1;        int day = c.get(Calendar.DAY_OF_MONTH);
        String week = getWeek(c.get(Calendar.DAY_OF_WEEK));

        System.out.println(year+"年"+month+"月"+day+"日"+week);
    }    public static String getWeek(int i) {        if(i<0 || i>7){            throw new RuntimeException(i+"没有对应的星期");
        }
        String[] weeks = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};        return weeks[i];
    }
}

webp



作者:达叔小生
链接:https://www.jianshu.com/p/887ee6fcb44b


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP