好久没有更新,因为最近学习的东西比较多且杂,时间也不太够用,于是就一直来不及总结。今天来总结一下最近学习的几个知识点。一个是继续把实用类总结收尾,一个是总结一下IO流,再一个总结一下多线程和XML。这篇先把日期类和io流总结一下。
实用类里还有三个和时间相关的类,一个是Date一个是Calendar,还有一个SimpleDateFormat用来转换。
在JAVA里常用来获取时间的方法有System.currentTimeMillis()这是一个long型的ms为单位的整数,该整数的值代表的是距离格林尼治标准时间(1970年1月1日0时0分0秒)的毫秒数。Date类的getTime()方法和System.currentTimeMillis()的效果是一模一样的。但由于千年虫的历史原因,Date类现在不直接用它来获取日期,而仅用来获取时刻,获取日期要配合使用SimpleDateFormat和Calendar类。
SimpleDateFormat有一个相对标准且严格的日期格式:yyyy/MM/dd HH:mm:ss
其中,y要小写,M要大写,d要小写,H大写是24小时制小写是12小时制,m是小写,s是小写。大家可以试试看哪些大小写可以改哪些不可以,但是最好就是记住这个格式严格套用就好了。也可以写成:yyyy-MM-dd HH:mm:ss或者yyyy年MM月dd日HH:mm:ss。常用方法是.format()和.parse()
Calendar类
Calendar类是个抽象类,不能直接new对象,通常要和date以及SimpleDateFormat一起使用。获取Calendar对象的方式一般用Calendar.getInstance()或者通过SimpleDateFormat对象.getCalendar()方法获取。通过Calendar对象可以setTime(),get(Calendar的静态方法),Calendar有很多静态方法,这个实际要用的时候现查现用。
总结io流之前先总结一下File类。
File类是操作文件的一个类,在计算机里可以视为一切都是文件。默认是有参构造,因此新建对象的时候要传一个String类型的参数进去,常用方法有exists(),isFile(),isDirectory(),getPath();getFile(),getParentFile(),getName(),delete(),deleteOnExit(),CreateNewFile(),mkdirs()。这里有个小坑,当一个路径不存在的时候,无论这个路径名是文件还是文件夹,用isFile()或者isDirectory()判断的结果都是false,所以不能通过判断isFile()或isDirectory()来确定是createNewFile()还是mkdirs()
遍历一个文件夹下的所有文件的方法,假设该方法叫做allfiles():
File f=new File(path);
File[] files=f.listFiles();
if(files==null || !f.exists()) retutn;
for(int i=0;i<files.length;i++){sout(files[i]);
allfiles(files[i].getpath());}//这边使用到一个递归调用,判断退出的条件是files数组为空,或者f不存在,因此可以正常跳出不会陷入死循环。
io流,io流一般都用来处理File。流按照流向分分为输入流input和输出流output,输入流是内存去读取文件,输出流是内存去写入文件。按照处理单元分分为字符流和字节流,字符流和字节流的区别,字节流一次传送1个字节,字符流一次传送2个字节,字节流是 8 位通用字节流,字符流是 16 位 Unicode 字符。按照使用目的分可以分为,转换流,缓冲流,二进制流,对象流。
下面按照使用场景分类来总结下:
如果是做全英文和数字的文件处理,主要用FileInputStream和FileOutputStream,这是字节输入流和字节输出流。
如果是包含中文的文件处理,主要用FileReader和FileWriter,这是字符输入流和字符输出流。
如果处理的文件非常大,数据量多,主要用缓冲流BufferedReader和BufferedWriter,缓冲流的优点是有一条.readline()指令可以读一行。这是字符输入输出流。
如果处理的文件是视频或者图片的拷贝,主要用二进制流DataInputStream和DataOutputStream。要搭配FileInputStream和FileOutputStream使用,这是字节输入输出流。
如果处理的文件是存储的对象,或者想以对象的形式存储文件,就需要使用对象流,但要求该对象的类实现了序列化的接口,因为ObjectInputStream和ObjectOutputStream在使用的时候第一步就是序列化和反序列化。这也是字节输入输出流,要搭配FileInputStream和FileOutputStream使用。