常用类的使用

凡是能和设备上的数据发生数据关系的,能去处理数据的,都会发生IO异常,无论读还是写。还有创建。

System:类中的方法和属性都是静态的。
out:标准输出,默认是控制台。
in:标准输入,默认是键盘。

获取系统属性信息:Properties getProperties();

因为Properties是Hashtable的子类,也就是Map集合的一个子类对象。
那么可以通过map的方法取出该集合中的元素。
该集合中存储都是字符串。没有泛型定义。

如何在系统中自定义一些特有信息呢?
static String setProperty(String key, String value) 
          设置指定键指示的系统属性。 

获取指定属性信息。
static String getProperty(String key) 
          获取指定键指示的系统属性。 

可不可以在jvm启动时,动态加载一些属性信息呢?
例如:getProperty("vkey");

虚拟机启动是通过java命令,在运行java命令时可以设置: -Dvkey=vvalue 字节码文件名
// java -Dvkey=vvalue SystemDemo

Runtime对象:
每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。
应用程序不能创建自己的 Runtime 类实例。

该类并没有提供构造函数。
说明不可以new对象。那么会直接想到该类中的方法都是静态的。
发现该类中还有非静态方法。
说明该类肯定会提供了方法获取本类对象。而且该方法是静态的,并返回值类型是本类类型。
由这个特点可以看出该类使用了单例设计模式完成。


该方式是static Runtime getRuntime();


Process exec(String command) 
          在单独的进程中执行指定的字符串命令。 

Process:进程类,,中有个方法:
abstract  void destroy() 
          杀掉子进程。 


Date对象:
日期对象,类 Date 表示特定的瞬间,精确到毫秒。 

DateFormat:
日期格式,格式化日期对象。(是抽象的)


String format(Date date) 
          将一个 Date 格式化为日期/时间字符串。 


SimpleDateFormat:
DateFormat的子类。
构造方法:
SimpleDateFormat(String pattern) 
          用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。


Calendar对象:

static Calendar getInstance() 
          使用默认时区和语言环境获得一个日历。 

 int get(int field) 
          返回给定日历字段的值。 

 字段:Calendar.YEAR 年
Calendar.MONTH 月
Calendar.DAY_OF_WEEK 星期几
Calendar.DAY_OF_MONTH 日
Calendar.HOUR_OF_DAY 时
Calendar.MINUTE 分
Calendar.SECOND 秒


void set(int):重载形式,可以设置日历字段的值,如:YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。
abstract  void add(int field, int amount) 
          根据日历的规则,为给定的日历字段添加或减去指定的时间量。 

需要注意的是:字段月份返回的值是0-11,而星期返回的值是1-7;如果要使用查表法进行查表,月份中0角标对应的是1月份,,,星期中0角标没有数据。1角标代表星期一


两个练习:
1,获取任意年的二月有多少天。
思路:根据指定年设置一个时间就是 
c.set(year,2,1)//某一年的3月1日。
c.add(Calenar.DAY_OF_MONTH,-1);//3月1日,往前推一天,就是2月最后一天。


2,获取昨天的现在这个时刻。
c.add(Calenar.DAY_OF_MONTH,-1);


Math类:
Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。 

static double ceil(double a) //返回大于指定数据的最小整数。
          返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。 
static double floor(double a) //返回小于指定数据的最大整数。
          返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。 
 static long round(double a) //四舍五入
          返回最接近参数的 long。 
static int round(float a) 
          返回最接近参数的 int。 
static double pow(double a, double b) 
          返回第一个参数的第二个参数次幂的值。 
 static double random() //随机数
          返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。 


Random类:
随机数类。此类的实例用于生成伪随机数流。
float nextFloat() 
          返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 float 值。 
int nextInt() 
          返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。 
int nextInt(int n) 
          返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。 

练习。给定一个小数。
保留该小数的后两位。
选作。可以考虑,保留时进行四舍五入。


字符流和字节流:
字节流两个基类:
InputStream   OutputStream


字符流两个基类:
Reader Writer


既然IO流是用于操作数据的,
那么数据的最常见体现形式是:文件。
那么先以操作文件为主来演示。

需求:在硬盘上,创建一个文件并写入一些文字数据。

找到一个专门用于操作文件的Writer子类对象。FileWriter。  后缀名是父类名。 前缀名是该流对象的功能。


//创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。
//而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。
//其实该步就是在明确数据要存放的目的地。
FileWriter fw = new FileWriter("demo.txt");


//调用write方法,将字符串写入到流中。
fw.write("abcde");


//刷新流对象中的缓冲中的数据。
//将数据刷到目的地中。
//fw.flush();


//关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。
//将数据刷到目的地中。
//和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。
fw.close();



IO异常的处理方式。

演示对已有文件的数据续写。
在建立FileWriter对象时,传递一个true参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写。


//创建一个文件读取流对象,和指定名称的文件相关联。
//要保证该文件是已经存在的,如果不存在,会发生异常FileNotFoundException
FileReader fr = new FileReader("demo.txt");

//调用读取流对象的read方法。
//read():一次读一个字符。而且会自动往下读。


第二种方式:通过字符数组进行读取。

//定义一个字符数组。用于存储读到字符。
//该read(char[])返回的是读到字符个数。

//读取一个.java文件,并打印在控制台上。


//将C盘一个文本文件复制到D盘。


复制的原理:
其实就是将C盘下的文件数据存储到D盘的一个文件中。

步骤:
1,在D盘创建一个文件。用于存储C盘文件中的数据。
2,定义读取流和C盘文件关联。
3,通过不断的读写完成数据存储。
4,关闭资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值