Properties集合中存储的都是String类型的键和值。最好使用它自己的存储和取出的方法来完成元素的操作。
import java.util.*;
class SystemDemo
{
public static void main(String[] args)
{
Properties prop = System.getProperties();
//因为Properties是Hashtable的子类,也就是Map集合的一个子类对象。
//那么可以通过map的方法取出该集合中的元素。
//该集合中存储都是字符串,没有泛型定义。
//如何在系统中自定义一些特有信息呢?
System.setProperty("mykey","myvalue");
//获取指定属性信息
String value = System.getProperty("on.name");
System.out.println("value="+value);
//可不可以在JVM启动时,动态加载一些属性信息呢?
String v=System.getProperty("haha");
String.out.println("v="+v);
/*
//获取所有属性信息。
for(Object obj : prop.keySet())
{
String value = (String)prop.get(obj);
System.out.println(obj+"::"+value);
}
*/
}
}
Runtime类
1.Runtime类没有提供构造函数(构造函数被私有化),不能创建对象,每个Java程序都有一个Runtime类实例,可通过getRuntime() 方法获取;
2.static Runtime getRuntime();//该方法返回本类对象;要想使用该类中的方法,可先调用该方法,获取对象;
3. 常用方法:
①exec(String command)在单独的进程中执行指定的字符串命令,该方法可启动pc中的应用程序,command-程序名;
②exec方法返回一个类型为Process的实例,该类有一个方法可以杀掉exec启动的程序,该方法为:
destory();杀掉子进程//Process类方法,谁调用杀谁;
③exce(String command file)可由command程序打开file文件,command为打开程序,file为可由command程序打开的文件;
例:Runtime r=Runtime.getRuntime();//返回本类对象;
Process p=r.exce(“notepad **.txt”)//用记事本打开**.txt文件; p.destroy();//杀掉notepad进程;
class RuntimeDmeo
{
public static void main(String[] args) throws Exception
{
Runtime r = Runtime.getRuntime();
r.exec("c:\\winmine.exe");
//Process p = r.exec("notepad.exe SystemDemo.java");
}
}
Math类
1.Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。该类全为静态方法。
2.常用方法:
ceil():返回大于参数的最小整数。
floor():返回小于参数的最大整数。
round():返回四舍五入的整数。
pow(a,b):a的b次方。
3.Random类
这是java.util中的一个单独的类,该类对象用于获取随机数。与Math中的random方法是一样的,不过这个类有自身的方法,可以将相应的 随机数强转为指定基本数据类型。
如:intnextInt(int n);//返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int值。
示例:
import java.util.Random;
public class MathDemo{
public static void main(String[] args){
double d1 = Math.ceil(12.56);//返回大于参数的最小整数
double d2 = Math.floor(12.56);//返回小于参数的最大整数
double d3 = Math.round(12.56);//返回四舍五入的整数
System.out.println(d1);//打印d1
System.out.println(d2);//打印d2
System.out.println(d3);//打印d3
double d4 = Math.pow(10,2);//求10的2次方
System.out.println(d4);//打印
Random r = new Random();//创建随机数对象
for(int i = 0; i < 5; i++){
double d5 = Math.ceil(Math.random() * 10);//返回大于参数的最小整数
System.out.println( "d5 = " + d5);//打印d5
}
for(int i = 0; i < 5; i++){
double d6 = (int)(r.nextDouble() * 6 + 1);
System.out.println( "d6 = " + d6);
}
}
}
Date、DateFormat类
1.Date类表示特定的瞬间,精确到毫秒。java中的默认显示格式为:Mon Jun 10 22:35:21 CST2013
2.日期对象和毫秒值之间的转换
毫秒值-->日期对象:
①通过Date对象的构造方法 new Date(timeMillis);
②还可以通过setTime设置。
因为可以通过Date对象的方法对该日期中的各个字段(年月日等)进行操作。
日期对象-->毫秒值:
①getTime方法。
因为可以通过具体的数值进行运算。
对日期对象进行格式化:
①将日期对象-->日期格式的字符串。
使用的是DateFormat类中的format方法。
示例:
import java.util.*;
import java.text.*;
class DateDemo
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
Date d = new Date();
sop(d);//打印的时间看不懂,希望有些格式。
//将模式封装成SimpleDateFormat对象中。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 E hh:mm:ss");
//调用format方法让模式格式化指定Date对象。
String time = sdf.format(d);
sop("time="+time);
}
}
Calendar类
1.Calendar 类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操 作日历字段(例如获得下星期的日期)提供了一些方法。
2.基本获取时间
1)获取年份:Calendar.YEAR
2)获取月份:Calendar.MONTH
3)获取日期:Calendar.DAY_OF_MONTH
4)获取星期:Calendar.DAY_OF_WEEK
5)获取小时:Calendar.HOUR_OF_DAY
6)获取分钟:Calendar.MINUTE
7)获取秒数:Calendar.SECOND
3.设置时间:
1)根据日历的规则,为给定的日历字段添加或减去指定的时间量:
void add(int field,int amount);
2)获取指定的日历字段对应的时间值:
int get(int field);
3)将给定日历字段对应的时间值设置为给定值:
void set(int field,int value);
4)设置日历字段 YEAR、MONTH和DAY_OF_MONTH的值:
void set(int year,int month,int date);
示例:
import java.util.*;
import java.text.*;
class CaalendarDemo
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
Calendar c = Calendar.getInstance();//创建一个Calendar对象
//创建一个月份的字符串数组
String[] mons = {"一月","二月","三月","四月","五月","六月"
,"七月","八月","九月","十月","十一月","十二月",};
//创建一个日的字符串数组
String[] weeks = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
int index = c.get(Calendar.MONTH);//返回给定日历字段所代表的值
int index1 = c.get(Calendar.DAY_OF_WEEK);//返回给定日历字段所代表的值
sop(c.get(Calendar.YEAR)+"年");//打印
//sop(c.get(Calendar.MONTH)+1)+"月");
sop(mons[index]);//打印
sop(c.get(Calendar.DAY_OF_MONTH)+"日");
//sop("星期"+c.get(Calendar.DAY_OF_WEEK));
sop(weeks[index1]);//打印
/*
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
String year = sdf.format(d);
sop(year);
*/
}
}
IO流
概述:
1.IO流:即InputOutput的缩写。
2.特点:
1)IO流用来处理设备间的数据传输。
2)Java对数据的操作是通过流的方式。
3)Java用于操作流的对象都在IO包中。
4)流按操作数据分为两种:字节流和字符流。
5)流按流向分为:输入流和输出流。
注意:流只能操作数据,而不能操作文件。
3.IO流的常用基类:
1)字节流的抽象基流:InputStream和OutputStream
2)字符流的抽象基流:Reader和Writer
Write类
1.该类是抽象类,只能由子类创建对象;
2.该类的常用方法:
append(char c) 将指定字符序列添加到此writer;
close() 关闭流,但要先刷新;
flush() 刷新,将流中的数据输入目的地;
write(char[] cbuf) 写入字符数组;
write(char[] cbuf,int off,int len) 写入一部分;
write(String str) 写入字符;
write(String str,int off,int len) 写入字符串中的一部分;
write(int c) 写入单个字符;
FileWriter
FileWriter是OutputStreamWriter(该类中有个特有的方法:getEncoding;返回此流使用的字符编码的名称)的子类,用于写入 字符文件的便捷类,用于写入字符流;
该类没有空构造函数,故该类一被创建就必须要有被该类操作的文件存在;常用构造函数:
FileWriter(String fileName);fileName-文件名;
例:FileWriter fw=new FileWriter(“demo.txt”);
import java.io.*;
class FileWriterDemo
{
public static void main(String[] args) throws IOException
{
//创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。
//而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。
//其实该步就是在明确数据要存放的目的地。
FileWriter fw = new FileWriter("demo.txt");
fw.write("haha");
//刷新流对象中的缓冲中的数据。
//将数据刷到目的地中。
fw.flush();
//关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。
//将数据刷到目的地中,
//和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。
}
}
FileWriter(String fileName,boolean append);fileName-文件名,append-指示是否附加写入数据(根据值确定,当值为true则不覆 盖原文件,而将数据添加到原文件的后面);该构造函数可实现对文件的续写。
如果对一个已存在的文件写入数据在已有数据的后面,但不覆盖已有的文件,可通过其构造函数传入的参数列表来实现,该 文件形式如: FileWriter fw=new FileWriter(“demo.txt“,true);
创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件,而且该文件会被创建到指定目录下,如果该目录下 已有同名文件,将被覆盖,其实该歩就是在明确数据要存的目的地;
/*
演示对已有文件的数据续写。
*/
import java.io.*;
class FileWriterDemo3
{
public static void main(String[] args) throws IOException
{
//传递一个true参数,代表不覆盖已有的文件,并在已有文件的末位处进行数据续写。
FileWriter fw = new FileWriter("demo.txt",true);
fw.write("haha\r\nxiexie");
fw.close();
}
}
该子类的常见使用方式:
fw.write(“…….”);//调用write方法,将字符串写入到流中;
fw.flush();//将流对象中缓冲数据刷入到目的地;
fw.close();//关闭流资源,关闭前会调用flush;
1.一般IO的方法都会出现异常,这种异常最好try不要抛,IO异常的处理需要注意的问题,举例说明:
FileWriter fw=null;//构造对象时指明了文件路径,也会出现异常需要try,但该变量全局引用所以要定义在try外面,否则在finally语句中,fw.close将会找不到fw变量;
try{
fw=new FileWriter("demo.txt");//初始化变量
fw.write("....");
}catch(IOException e){
S.O.P(e.toString());
}finally{//colse()关闭资源必须定义在finally语句中;
try{
if(fw!=null)//如果在初始化阶段异常,则fw指向空,无法引用
fw.colse();//colse()函数出现nullpointException异常,所以必须判断是否为null;
}catch(IOException ex){
S.O.P(ex.toString());
}
}
示例:
/*
IO异常的处理方式。
*/
import java.io.*;
class FileWriterDemo2
{
public static void main(String[] args)
{
FileWriter fw =null;
try
{
fw = new FileWriter("demo.txt");
fw.write("adfdssdfds");
}
catch (IOException e)
{
System.out.println(e.toSring());
}
finally
{
try
{
if(fw!=null)
fw.close();
}
catch (IOException e)
{
System.out.println(e.toSring());
}
}
}
}
Reader类
1.该类用于读取字符流的抽象类,子类必须实现的方法只有read(char[] ch,int i,int i1)和close();
2.该类常用方法:
close() 关闭流;
read() 读取单个字符;
read(char[] cbuf) 将字符读入数组;
read(char[] cbuf,int off,int len) 将字符读入数组的某一部分;
FileReader
1.FileReader类用于读取字符流(该类中有默认编码);
2.该类时InputStreamReader的一个子类;其实Reader的用法及结构与Writer相似,其结构是一一对应的(大多数)。
3.FileReader的构造函数:
FileReader(String fileName);fileName-要读取数据的文件名,该对象一创建就要有指定的文件;
例:FileReader fr=new FileReader(“Demo.txt”);
4.创建一个文件读取流对象,和指定名称的文件相关联,要保证该文件是否是存在的,如果不存在,会发 生FileNotFoundException异常;
5.FileReader常用方法
read();该方法一次读取一个字符,返回的是int,并会自动往下读;
read(char[] ch);将读取的字符存入指定的字符数组ch,当存满后再打印,该方法返回的是读到的字符的个数;
close();关闭读取流;
6.两种读取方法的应用方式:
①fr.read();//调用读取流对象的read方法,该方法没有参数时,一次读取一个字符,返回的是int,并会自动往下 读;
示例:
import java.io.*;
class FileReaderDemo
{
public static void main(String[] args)
{
//创建一个文件读取流对象,和指定名称的文件相关联。
//要保证该文件是已经存在的,如果不存在,会发生异常FileNotFoundException
FileReader fr = new FileReader("demo.txt");
//调用第一种方法:读取流对象的read方法。
//read();一次读一个字符,而且会自动往下读。
int ch = fr.read();
System.out.println("ch="+(char)ch);
fr.close();
int ch = 0;
while((ch=fr.read())!=-1)
{
System.out.println("ch="+(char)ch);
}
}
}
②read(char[] ch);该方法返回的是读到的字符个数,该返回值可作为判断最后一个字符在字符数中的位置;通过字符 数组进行读取,将读取的字符先存入一个字符数组中(长度自定义,一般取1024的倍数),当数组存满后再打印数组。
示例:
/*
第二种方式:通过字符数组进行读取。
*/
import java.io.*;
class FileReaderDemo2
{
public static void main(String[] args)
{
FileReader fr = new FileReader("demo.txt");
//定义一个字符数组,用于存储读到字符。
//该read(char[])返回的是读到字符个数。
char[] buf = new char[3];
int num = 0;
while((num=fr.read(buf))!=-1)
{
System.out.println(new String(buf,0,num));
}
System.out.println("num="+num+"..."+new String(buf));
int num1 = fr.read(buf);
System.out.println("num1="+num1+"..."+new String(buf));
int num2 = fr.read(buf);
System.out.println("num2="+num2+"..."+new String(buf));
int num3 = fr.read(buf);
System.out.println("num3="+num3+"..."+new String(buf));
fr.close();
}
}
Reader和Writer的综合应用
复制文本文件:
import java.io.*;
class CopyText {
public static void main(String[] args) throws IOException{
copy_2();
}
public static void copy_2(){
FileWriter fw = null;
FileReader fr = null;
try{
fw = new FileWriter("SystemDemo_copy.txt");
fr = new FileReader("SystemDemo.java");
char[] buf = new char[1024];
int len = 0;
while((len=fr.read(buf))!=-1){
fw.write(buf,0,len);
}
}catch (IOException e){
throw new RuntimeException("读写失败");
}finally{
if(fr!=null)
try{
fr.close();
}catch (IOException e){}
if(fw!=null)
try{
fw.close();
}catch (IOException e){}
}
}
//从C盘读一个字符,就往D盘写一个字符。
public static void copy_1()throws IOException{
//创建目的地。
FileWriter fw = new FileWriter("RuntimeDemo_copy.txt");
//与已有文件关联。
FileReader fr = new FileReader("RuntimeDemo.java");
int ch = 0;
while((ch=fr.read())!=-1){
fw.write(ch);
}
fw.close();
fr.close();
}
}