---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
System:类中的方法和属性都是静态的。常见方法: long currentTimeMillis();获取当前时间的毫秒值。
其中System.getProperties()的方法,获取系统的属性信息,并存储到了Properties集合中,而properties集合中存储都是String类型的键和值。,最好使用它自己的存储和 取出的方法来完成元素的操作;System.setProperty("myclasspath", "c:\myclass"),是给系统设置一些属性信息,这些信息是全局,其他程序都可以使用。
Runtime类: Runtime r = Runtime.getRuntime();没有构造方法摘要,说明该类不可以创建对象。又发现还有非静态的方法,说明该类应该提供静态的返回该类对象的方法,而且 只有一个,说明Runtime类使用了单例设 计模式。它的方法主要是exec(),比方说Process p = r.exec("notepad.exe"),在任务管理器进程中就有了,消除进程为p.destory();
Math类:提供了操作数学运算的方法。都是静态的。 常用的方法:ceil(double a):返回大于参数的最小整数。 floor(double a):返回小于参数的最大整数。 round(double a):返回 四舍五入数。pow(double a, double b):a的b次方。random():返回大于等于0小于1的伪随机数。
Date类的演示:
public class DateDemo {
public static void main(String[] args) throws ParseException {
methodDemo_3();
}
/**
* 将日期格式的字符串-->日期对象。
* 使用的是DateFormat类中的parse()方法。
*/
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);
}
/**
* 对日期对象进行格式化。
* 将日期对象-->日期格式的字符串。
* 使用的是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);
//如果风格是自定义的如何解决呢?
dateFormat = new SimpleDateFormat("yyyy--MM--dd");
String str_date = dateFormat.format(date);
System.out.println(str_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);
}
}
Calendar类的演示:
public class CalendarDemo {
public static void main(String[] args) {
Calendar c = Calendar.getInstance(); //得到Calendar的实例,使用默认时区和语言环境获得一个日历。
int year = 2012;
showDays(year);
}
public static void showDays(int year) {
Calendar c = Calendar.getInstance();
c.set(year, 2, 1); //设置日历字段的值
c.add(Calendar.DAY_OF_MONTH, -1);//根据日历的规则,为给定的日历字段添加或减去指定的时间量
showDate(c);
}
public static void showDate(Calendar c) {
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;
int day = c.get(Calendar.DAY_OF_MONTH);
int week = c.get(Calendar.DAY_OF_WEEK);
System.out.println(year+"年"+month+"月"+day+"日"+getWeek(week));
}
public static String getWeek(int i) {
String[] weeks = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
return weeks[i];
}
}
————————————————————————————————————————
输入流和输出流相对于内存设备而言,将外设中的数据读取到内存中:输入;将内存的数写入到外设中:输出。
字符流的由来:其实就是:字节流读取文字字节数据后,不直接操作而是先查指定的编码表。获取对应的文字。在对这个文字进行操作。简单说:字节流+编码表
字节流的两个顶层父类:1,InputStream 2,OutputStream;字符流的两个顶层父类:1,Reader 2,Writer
这些体系的子类都以父类名作为后缀,而且子类名的前缀就是该对象的功能。
BufferedReader ,BufferedWriter:内部将数组进行封装。变成对象后,方便于对缓冲区的操作。提高效率。并提供了对文本便捷操作的方法。readLine,newLine,自定义的字符串缓冲区我还没能真正掌握,需要再去练习。对于Readline实现原理其实就是使用了读取缓冲区的Read方法,将读取到的字符进行缓冲并判断换行标记,将标记的前的缓冲数据变成字符串返回。
装饰设计模式,对一组对象的功能进行增强时,就可以使用该模式进行问题的解决。这里就相对于继承而言也能实现装饰设计模式的功能,但是如果后人想要增加功能,继承会很多导致了继承体系臃肿不灵活,这里就想到可不可以将缓冲进行单独的封装,哪个对象需要缓冲就将哪个对象和缓冲关联。比如下面这样的形式:
class BufferWriter extends Writer{
BufferWriter(Writer w)
{
}
}
————————————————————————————————————————
下面是一段读写的综合代码,这里需要注意下的是异常我们要去处理,这里为了省事没处理。还要注意在书写时流的关闭。
public class CopyMp3Test {
public static void main(String[] args) throws IOException {
copy_4();
}
// 千万不要用,效率没有!
public static void copy_4() throws IOException {
FileInputStream fis = new FileInputStream("c:\\0.mp3");
FileOutputStream fos = new FileOutputStream("c:\\4.mp3");
int ch = 0;
while((ch =fis.read())!=-1){ //一个字符一个字符的读和写
fos.write(ch);
}
fos.close();
fis.close();
}
//不建议。
public static void copy_3() throws IOException {
FileInputStream fis = new FileInputStream("c:\\0.mp3");
FileOutputStream fos = new FileOutputStream("c:\\3.mp3");
byte[] buf = new byte[fis.available()];
fis.read(buf);
fos.write(buf);
fos.close();
fis.close();
}
public static void copy_2() throws IOException {
FileInputStream fis = new FileInputStream("c:\\0.mp3");
BufferedInputStream bufis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream("c:\\2.mp3");
BufferedOutputStream bufos = new BufferedOutputStream(fos);
int ch = 0;
while((ch=bufis.read())!=-1){ //利用缓冲区读写
bufos.write(ch);
}
bufos.close();
bufis.close();
}
public static void copy_1() throws IOException {
FileInputStream fis = new FileInputStream("c:\\0.mp3");
FileOutputStream fos = new FileOutputStream("c:\\1.mp3");
byte[] buf = new byte[1024];
int len = 0;
while((len=fis.read(buf))!=-1){ //利用读入数组的读写
fos.write(buf,0,len);
}
fos.close();
fis.close();
}
}
————————————————————————————————————————
InputStreamReader :字节到字符的桥梁。解码。
OutputStreamWriter:字符到字节的桥梁。编码。
流的操作规律:
之所以要弄清楚这个规律,是因为流对象太多,开发时不知道用哪个对象合适。
想要知道开发时用到哪些对象。只要通过四个明确即可。
1,明确源和目的(汇)
源:InputStream Reader
目的:OutputStream Writer
2,明确数据是否是纯文本数据。
源:是纯文本:Reader
否:InputStream
目的:是纯文本 Writer
否:OutputStream
到这里,就可以明确需求中具体要使用哪个体系。
源设备:
硬盘:File
键盘:System.in
内存:数组
网络:Socket流
目的设备:
硬盘:File
控制台:System.out
内存:数组
网络:Socket流
1,是否需要高效(缓冲区);
是,就加上buffer.
2,转换。
public static void main(String[] args) throws IOException {
/*
* 1,需求:将键盘录入的数据写入到一个文件中。
*
* 2,需求:将一个文本文件内容显示在控制台上。
*
* 3,需求:将一个文件文件中的内容复制到的另一个文件中。
*/
1. BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt")));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
BufferedWriter bufw = new BufferedWriter(new FileWriter("b.txt"));
String line = null;
while((line=bufr.readLine())!=null){
if("over".equals(line))
break;
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
}
}
1,源或者目的对应的设备是字节流,但是操作的却是文本数据,可以使用转换作为桥梁。
提高对文本操作的便捷。
2,一旦操作文本涉及到具体的指定编码表时,必须使用转换流 。
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------