1、一个从来都忽视的小问题:以前学习java都是在eclipse中,一写好程序就直接点击运行(eclipse中,保存文件时就自动编译)。现在看视频中,老师在命令行下进行编译,自己也试了下,直接在命令
行输入javac Test.java报错,很奇怪,后来发现是没有给系统指定文件的位置,所以:编译时应该先指定位置,或转到该目录下,比如文件在D盘,命令行输入D:回车,然后再编译(编译产生的类文件就
放在程序同一目录下)。还有就是,编译时给定文件全名。
2、日期相关类Date、Calendar
1)Calendar类是一个抽象类,它有一些static字段,代表了日历中的一些不同的值,比如YEAR,MONTH等等。如果要获取这些值,自己试验过,有两种方式:1、实例化一个GregorianCalendar类对象
(GregorianCalendar gc = new GregorianCalendar();),GregorianCalendar是Calendar类的子类,并调用get()方法;2、获得Calendar类的一个实例(Calendar c = Calendar.getInstance();),调
用get()方法。
2)Calendar.MONTH代表的是日期中的月份,但需要注意的是,它从0到11分别对应1-12月份,例如,如果7月份用get方法获取,它的值就是6,同样,如果用set方法赋值的话,赋值6就代表7月。
3)Calendar.DAY_OF_WEEK代表的是星期几,它的值是从1-7,分别对应周日到周六。
看了毕向东老师的视频,关于计算两个日期之间的工作日天数(工作日是周一到周五)。大体按思路写了一下如下,不过只写了计算两个固定的日期2011.12.13-2012.2.2,如果动态的给出日期,再加修改
就行。
import java.util.*;
import java.text.*;
//获取2011.12.13-2012.2.2共多少个工作日(工作日为周一到周五)
class CalendarDemo3
{
public static void main(String[] args)
{
String[] mons = {"一月","二月","三月","四月",
"五月","六月","七月","八月",
"九月","十月","十一月","十二月"};
String[] weeks = {"","星期日","星期一","星期二","星期三",
"星期四","星期五","星期六"};
Calendar c = Calendar.getInstance();
//2011.12.13-2012.2.2
int workDays=0;
c.set(2011,11,13);
while(true) {
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int dayM = c.get(Calendar.DAY_OF_MONTH);
int dayW = c.get(Calendar.DAY_OF_WEEK);
if(year == 2012 && month == 1 && dayM == 3)
break;
else {
if(dayW != 1 && dayW != 7)
workDays++;
c.add(Calendar.DAY_OF_MONTH,1);
}
}
System.out.println("c的值是");
sop(c.get(Calendar.YEAR) + "年");
sop(mons[c.get(Calendar.MONTH)]);
sop(c.get(Calendar.DAY_OF_MONTH) + "日");
sop(weeks[c.get(Calendar.DAY_OF_WEEK)]);
System.out.println("2011.12.13-2012.2.2共有 " + workDays + " 个工作日。");
}
public static void sop(Object obj) {
System.out.println(obj);
}
}
3、IO输入输出流:
1)分为两种:字节流和字符流,字符流针对文本类数据,字节流针对除了字符流的其他类别的数据文件。
字符流的输入输出类为:Reader和Writer
字节流的输入输出类为:InputStream和OutputStream
close是关闭流资源,但在关闭之前将刷新一次流对象中的数据。
和flush区别:flush将数据刷到目的地之后,还可以继续使用。
close是刷新后,将流关闭。不可再使用。无论是读文件,还是写文件,当操作完成之后,一定要调用close关闭流资源。