Java基础-18
来源:互联网 发布:反ip域名查询 编辑:程序博客网 时间:2024/06/16 23:11
Java基础-常用API介绍及IO流API
常用API简介及IO流API
1、其他对象(System)
java.lang.System
System 类包含一些有用的类字段和方法。它不能被实例化。 System:类中的方法和属性都是静态的。 out:System类中的字段,返回的类型是static PrintStream,是“标准”输出流,默认是控制台。 in:System类中的字段,返回的类型是static InputStream,是“标准”输入流,默认是键盘。
获取系统属性信息:
static Properties getProperties();//确定当前的系统属性。
- 可不可以在jvm启动时,动态加载一些属性信息呢?
测试代码:
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 = (String)System.getProperty("os.name"); System.out.println("value="+value); //读取之前在jvm启动时动态加载的属性信息。 String v = System.getProperty("haha"); System.out.println("v="+v); //获取所有系统属性信息 for(Object obj : prop.keySet()) { String value_me = (String )prop.get(obj); System.out.println(obj+"::"+value_me); } }}
输出:
2、其他对象(Runtime)
java.lang.Runtime
Runtime类:该类中并没有提供构造函数,说明不可以new对象,那么会直接想到该类中的方法都是静态的,发现该类中还有被静态方法。说明该类肯定会提供了方法获取本类对象。而且该方法是静态的,并返回值类型是本类类型。获取本类对象方法是
static Runtime getRuntime();// 返回与当前 Java 应用程序相关的运行时对象。
由这个特点可以看出该类使用了单例设计模式来完成。
java.lang.Process
ProcessBuilder.start() 和 Runtime.exec 方法创建一个本机进程,并返回 Process 子类的一个实例,该实例可用来控制进程并获得相关信息。Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。
测试代码:
import java.util.*;class RuntimeDemo{ public static void main(String [] args)throws Exception { Runtime r = Runtime.getRuntime();//获取Runtime对象。 //Process p = r.exec("winmine.exe");//打开程序。 //打开写字本,并让写字本打开一个SystemDemo.java文件 Process z = r.exec("notepad.exe SystemDemo.java"); Thread.sleep(4000);//主线程睡眠4秒 z.destroy();//杀掉一个子线程。 }}
3、其他对象(Date)
java.util.Date
Date类:表示特定的瞬间,精确到毫秒。
Date();// 分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
java.text.SimpleDateFormat SimpleDateFormat类:SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
SimpleDateFormat(String pattern);//用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。String format(Date d);//调用format方法让模式格式化指定Date对象
测试代码:
import java.util.*;import java.text.*;class DateDemo{ public static void main(String [] args)throws Exception { Date d = new Date(); System.out.println(d); //打印的时间看不懂,希望有些格式。 //将模式封装到SimpleDateFormat对象中。 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日E hh:mm:ss"); //调用format方法让模式格式化指定Date对象 String time = sdf.format(d); System.out.println("time:"+time); }}
输出:
4、其他对象(Calendar)
java.util.Calendar Calendar 类:是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAYOFMONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。
DEMO
import java.util.*;import java.text.*;class CalendarDemo{ public static void main(String[]args) { Calendar c = Calendar.getInstance(); //打印对象里所有的信息 System.out.println(c); String[] mons = {"一月","二月","三月","四月", "五月","六月","七月","八月", "九月","十月","十一月","十二月"}; String [] weeks = {"","星期日","星期一","星期二", "星期三","星期四","星期五","星期六"}; int index = c.get(Calendar.MONTH); int index1 = c.get(Calendar.DAY_OF_WEEK); System.out.println(c.get(Calendar.YEAR)+"年"); //System.out.println(c.get((Calendar.MONTH+1)+"月"); System.out.println(mons[index]); System.out.println(c.get(Calendar.DAY_OF_MONTH)+"日"); //System.out.println("星期"+c.get(Calendar.DAY_OF_WEEK)); System.out.println(weeks[index1]); Calendar c1 = Calendar.getInstance(); //设置系统时间 c1.add(Calendar.YEAR,-1); System.out.println(c1.get(Calendar.YEAR)+"年"); }}
输出:
5、其他对象(Math)
java.lang.Math Math类:Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
Demo
import java.util.*;import java.text.*;class MathDemo{ public static void main(String[]args) { double d = Math.ceil(16.34);//ceil返回大于指定数据的最小整数。 double d1 = Math.floor(12.34);//floor返回小于指定数据的最大整数。 long l =Math.round(12.54);//四舍五入 double d2 = Math.pow(2,3);//返回第一个参数的第二个参数次幂的值。 System.out.println("Math.ceil(16.34):"+d+",Math.floor(12.34):" +d1+",Math.round(12.54):"+l+",Math.pow(2,3):"+d2); }}
输出:
如何生成随机数?
在Math类里有random()方法可以生成随机数,除了该方法,Java还有另外一种生成随机数的方式,就是Random类 java.util.Random Random类:此类的实例用于生成伪随机数流。 测试代码:
import java.util.*;import java.text.*;class RandomDemo{ public static void main(String[]args) { Random r = new Random(); //随机1到10的方法1 for(int x=0;x<10;x++) { int d = (int )(Math.random()*10+1); System.out.print(d+" "); } System.out.println(); for(int x=0;x<10;x++) { int d = r.nextInt(10)+1;//方法2 System.out.print(d+" "); } }}
输出:
6、IO流(概述)
IO(Input Output)流
* IO流用来处理设备之间的数据传输* Java对数据的操作是通过流的方式* Java用于操作流的对象都在IO包中* 流按操作数据分为两种:字节流和字符流* 流按流向分为:输入流和输出流
流常用基类:
*字节流的抽象基类:InputStream、OutputStream*字符流的抽象基类:Reader、Writer
注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。 如: InputStream的子类FileInputStream Reader的子类FileReader
7、IO流(FileWriter)
IO包
字符流和字节流:
*字节流分为两类:InputStream、OutputStream*字符流分为两类:Reader、Writer
先学习一下字符流的特点: 既然IO流是用于操作数据的,那么数据的最常见体现形式是:文件。
那么就先以操作文件为主来演示。 需求:在硬盘上,创建一个文件并写入一些文字数据。 我们找到了一个专门用来操作文件的Writer子类对象:FileWriter。后缀名是父类名,前缀名是该流对象的功能。 测试代码:
import java.io.*;class FileWriterDemo { public static void main(String[]args)throws IOException { //创建一个FileWriter对象,该对象一被初始化就必须明确被操作的文件 //而且该文件会被创建到指定目录下,如果该目录已有同名文件,将被覆盖。 FileWriter fw = new FileWriter("D:\\JAVADEMO\\day15\\FileWriterNewFile.txt"); //调用write方法,将字符串写入到流中。 fw.write("我的文件输出流的例子"); //刷新流对象中的缓冲中的数据。 //将数据刷到目的地中 fw.flush(); //关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据 //将数据刷到目的地中。 //和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭 fw.close(); //fw.write("haha"); }}
输出:
8、IO流(IO异常处理方式)
IO异常的处理方式模板
import java.io.*;class FileWriterDemo2{ public static void main(String[]args) { FileWriter fw = null; try { fw = new FileWriter("D:\\JAVADEMO\\day15\\FileWriterNewFile_1.txt"); fw.write("abc"); } catch (IOException e) { System.out.println("catch:"+e.toString()); } finally { try { if(fw!=null) { fw.close(); } } catch (IOException e) { System.out.println(e.toString()); } } }}
9、IO流(文本文件读取方式一)
import java.io.*;class FileReaderDemo{ public static void main(String [] args)throws IOException { //创建一个文件读取流对象,和指定名称的文件相关联, //要保证该文件时已经存在的,如果不存在,会发生异常FileNotFoundException FileReader fr = new FileReader ("D:\\JAVADEMO\\day15\\FileWriterNewFile.txt"); //调用读取流对象的read方法 //read();//一次读一个字符,而且会自动往下读。 int ch = 0; while ((ch = fr.read())!=-1) { System.out.print((char)ch); } }}
输出:
10、IO流(文本文件读取方式二)
第二种方式通过字符数组进行读取
测试代码:
import java.io.*;class FileReaderDemo1{ public static void main(String [] args)throws IOException { FileReader fr = new FileReader ("D:\\JAVADEMO\\day15\\FileWriterNewFile.txt"); //定义一个字符数组,用于存储读到字符 //该read(char[])返回的是读到字符个数 char [] buf = new char[1024]; int num = 0; while ((num=fr.read(buf))!=-1) { System.out.println(new String(buf,0,num)); System.out.println('a'); } fr.close(); }}
输出:
11、IO流(拷贝文本文件)
将C盘一个文本文件复制到D盘 复制原理: 其实就是将C盘下的文件数据存储到D盘的一个文件中。 步骤:
(1)、在D盘创建一个文件,用于存储C盘文件中的数据。(2)、定义读取流和C盘文件关联(3)、通过不断的读写完成数据存储(4)、关闭资源。
Demo
import java.io.*;class CopyTest{ public static void main(String [] args)throws IOException { copy_1(); copy_2();//效率高 } public static void copy_2() { FileWriter fw = null; FileReader fr = null; try { fw = new FileWriter("D:\\JAVADEMO\\day15\\myDoc_copy.txt"); fr = new FileReader("C:\\myDoc.txt"); char [] buf = new char[1024]; int len = 0; while ((len=fr.read(buf))!=-1) { fw.write(buf,0,len); System.out.println('a');//证明一次上面语句是只执行一次的标记 } } catch (IOException e) { throw new RuntimeException("读写失败"); } finally { try { fr.close(); } catch (IOException e) { } try { fw.close(); } catch (IOException e) { } } } //从C盘读一个字符,就往D盘写一个字符 public static void copy_1() { FileWriter fw = null; FileReader fr = null; try { fw = new FileWriter("D:\\JAVADEMO\\day15\\myDoc_copy1.txt"); fr = new FileReader("C:\\myDoc.txt"); int len = 0; while ((len=fr.read())!=-1) { fw.write(len); System.out.print('b');//证明一次上面语句是只执行n次的标记 } } catch (IOException e) { throw new RuntimeException("读写失败"); } finally { try { fr.close(); } catch (IOException e) { } try { fw.close(); } catch (IOException e) { } } } }
输出:
- java基础问题18
- java基础--笔记18
- java基础18
- Java基础-18
- java基础18,Math
- java基础18-date
- java基础18-io
- java基础第18天
- java基础18io流
- JAVA基础(18) Java 多线程 并发编程
- java基础18:java动态代理
- Java基础01:基础
- Java基础:基础加强
- Java基础-基础
- java基础的基础
- JAVA基础---基础常识
- Java基础:基础加强
- [Java 基础]基础语法
- HTTPS与SSL(一)
- jQuery验证框架
- 判断Android是否有root权限
- angularjs学习之四(解决模板视图和angularjs之间的冲突 )
- Linux下的CPU利用率计算原理详解
- Java基础-18
- selinux 下增加文件节点权限
- DDoS攻击详解
- 最简单的基于librtmp的示例:发布(FLV通过RTMP发布)
- 巴菲特:给股东信件中的精华句子
- OpenCV Tips
- uva 674 Coin Change【背包】
- new Handler().obtainMessage().sendToTarget()过程分析
- 我的毕业生涯至从零开始从事编程开发