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盘。