一些常见的对象:
System:不能被实例化。getProperties(); //获取系统的一些信息,是HashTable的一个子类,所以属于Map集合。常用方法:
setProperty(String key,String value); //设置系统信息。
getProperty(String key); //通过键获取指定系统值。
setIn(InputStream in); //更改系统标准输入流,默认为键盘。
setOut(PrintStream out); //更改系统标准输出流,默认为控制台。
Runtime:每一个Java应用程序都有一个Runtime类实例,使之能够与其运行环境相连接。是单例设计模式的。
getRuntime(); //返回一个Runtime类型的本类对象,此方法是静态的。
exec(String command); //传入要打开的应用程序文件名,打开此文件。
Runtime r = Runtime.getRuntime();
Process p = r.exec("111.exe"); //创建一个本机进程。
p.destory(); //杀掉子进程。
Date类:表示特定的瞬间,精确到毫秒。
DateFormat类:
SimpleDateFormat类:日期格式化类。
例如:Date d = new Date();
SimpleDateFormat() sdf = new SimpleDateFormat("yyyy年MM月dd日E hh:mm:ss");
String time = sdf.format(d);
Calendar类:对相关日历字段值的操作方法。
获取实例:Calendar c = Calendar.genInstance();
c.get(Calender.YEAR); //获取年份。
c.set(2012.3.1); //设置时间,其中月份比实际的多1.
c.add(Calendar.YEAR,5); //在指定的日历中加上指定的数值,此例是指在年中加5年。
Math类:数学类。都是静态方法。
ceil(double d); //返回大于指定数据的最小整数。
floor(double d); //返回小于指定数据的最大整数。
round(double d); //四舍五入。
pow(double a,double b); //a是底数,b是幂数。
random(); //随机数,等同于Ramdom.nextInt(10)+1,的应用,取1-10之间的随机整数。
IO流:输入流:字节流:InputStream
FileInputStream
方法一:
FileInputStream fis = new FilsInputStream("222.txt");
int ch = 0; //定义一个int变量用来记录读取到的字节的int表现形式。
while((ch=fis.read())!=-1){ //如果读取到了字节,则返回值不为-1,则写出。
System.out.print((char)ch);
}
fis.close();
方法二;
FileInputStream fis = new FileInputStream("222.txt");
byte[] buf = new byte[1024]; //定义一个固定长度的数组用于缓存数据,长度通常为1024的倍数。
int len = 0; //定义一个长度用来记录数组中读入字节的个数。
while((len=fis.read(buf))!=-1){
System.out.println(new String(buf,0,len));
}
fis.close();
方法三:
FileInputStream fis = new FileInputStream("222.txt");
byte[] buf = new byte[fis.available()]; //定义一个和所要读取的数据一样大的数组,可以免去循环读取。
System.out.println(new String(buf)); //缺陷是如果要读取的文件过大,会引起内存溢出。
fis.close();
字符流:Reader
FileReader
方法一:
FileReader fr = new FileReader("1.txt"); //创建文件读取流对象,并与文件相关联。
int ch = 0;
while((ch=fr.read())!=-1){ //read()方法返回的是读取的字符的int表现形式,当没有读到字符的时候返回-1。
System.out.print((char)ch);
}
fr.close();
方法二;
FileReader fr = new FileReader("1.txt");
char[] buf = new char[1024]; //定义一个字符数组用于保存读入的字符。
int num = 0; //定义一个变量num,用于记录读入数组buf中的字符个数。
while((num=fr.read(buf))!=-1){ //将数据读入buf中。
System.out.print(new String(buf,0,num)); //new一个String对象,将buf中的字符从0角标开始,读num个。
}
fr.close();
输出流:字节流:OutputStream
FileOutputStream
实例如下:
FileOutputStream fos = new FileOutputStream("111.txt");
fos.write("abcde".getBytes());
fos.close();
字符流:Writer
FileWriter
实例如下:
FileWriter fw = new FileWriter("1.txt",true); //将字符文件写入指定文件。将第二个参数设置为true表示不覆盖原来的数据,在原数据后续写。
fw.writer();
fw.flush(); //将数据从内存中刷入硬盘中,流不关闭。
fw.close(); //将数据从内存中刷入硬盘中,流关闭。
缓冲区:BufferedReader:Reader的子类。
|--已知子类:LineNumberReader:特有方法:getLineNumber(); //获取当前行号。
setLineNumber(int linnumber); //设置当前行号。
实例如下:
FileReader fr = new FileReader("1.txt");
BufferedReader bufr = new BufferedReader(fr);
String line = null;
while((line=bufr.readline())!=null){//readline()读取一行,当返回null时表示读到末尾。readline()只返回换行 符之前的内容。
System.out.println(line);
}
bufr.close();
BufferedWriter: Writer的子类。
实例如下:
FileWriter fw = new FileWriter("111.txt");
BufferedWriter bufw = new BufferedWriter(fw);
for(int i=1;i<5;i++){
bufw.write("abcde");
bufw.newLine(); //缓冲区特有的换行方法。
bufw.flush();
}
bufw.close();
BufferedInputStream:
BufferedOutputStream:
转换流:属于字符流的子类:
InputStreamReader:
实例如下:
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader bufr = new BufferedReader(isr);
String line = null;
while((line=bufr.readLine())!=null){
if(line.equals("over"))
break;
System.out.println(line.toUpperCase());
}
OutputStreamWriter:
实例如下:
OutputStreamWriter osw = new OutputStreamWriter(System.out);
BufferedWriter bufw = new BufferedWriter(osw);
String lint = null;
while((line=bufr.readLine())!=null){
if(line.equals("over"))
break;
bufw.writer(line.toUpperCase());
bufw.flush();
bufw.newLine();
}
bufw.close();
bufr.close();
把数据按照指定的编码表存入到文件中:
按照指定的编码表存数据只有转换流可以,
例如:OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("111.txt"),"UTF-8");
打印流:提供了打印方法,可以将各种数据原样打印。
PrintWriter:
PrintStream:
构造函数:PrintStream(File file); //接受一个File文件。
PrintStream(OutputStream out) ; // 接受一个字节输出流。
PrintStream(String fileName); //接受一个字符串路径名。
串联流:表示其他输入流的逻辑串联。
SequenceInputStream(Enumeration<? extends InputStream> e)
做法如下:
Vector<FileInputStream> v = new Vector<FileInputStream>();
v.add(new FileInputStream("1.txt"));
v.add(new FileInputStream("2.txt"));
v.add(new FileInputStream("3.txt"));
Enumeration<FileInputStream> en = v.elements();
SequenceInputStream sis = new SequenceInputStream(en);
对象流:可以对对象进行输入输出。使用该流的对象类必须实现Serializable接口。
ObjectInputStream:
readObject();
ObjectOutputStream:
writeObject(Object obj);
管道流:涉及到多线程。
PipedInputStream:
PipedOutputStream:
数据流:专门用于操作基本数据类型的流。
DataInputStream:
DateOutputStream:
字节数组流:不操作底层资源,所以不涉及到流的关闭。
ByteArrayInputStream:构造时需要传入一个字节数组。
ByteArrayOutputStream:内部定义了一个字节数组。
字符数字流:
CharArrayReader:
CharArrayWrite:
字符串流:
StringReader:
StringWriter:
RandomAccessFile类:此类的实例支持对随机存取文件的读取和写入。
构造函数:RandomAccessFile(File file, String mode); //mode 为文件是只读r还是读写rw模式。
RandomAccessFile(String name, String mode);
RandomAccess ra = new RandomAccessFile("a.txt",rw);
ra.write("张三".getByte());
ra.writeInt(97); //用write方法直接将数据写入文件中。
ra.seek(long pos); //设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。
File类:用于将文件或文件夹封装成对象的类。
构造函数: //将一个绝对路径作为参数传入。
File f = new File("c:\\a\\222.txt");
//将一个相对路径和文件名作为两个参数传入。
File f = new File("c:\\a","222.txt");
//将一个已有文件和一个新的文件名作为参数传入。
File f = new File(new File("c:\\a"),"222.txt");
常用的方法:
创建:creatNewFile(); //当指定文件不存在时,在指定目录下创建一个新的空文件夹,并返回true,否则返回false。
creatTempFile(String a,String b); //在默认临时文件存放目录中创建一个空文件夹,使用指定的a为前缀,b为后缀。
creatTempFile(String a,String b,File f);//在指定的f目录下创建一个空文件夹,使用指定的前缀和后缀。
mkdir(); //创建目录(文件夹)。只能创建一级目录。
mkdirs();//创建多级文件夹。
renameTo(File dest); //换名字。
separator //与系统有关的名称分割符。例如 \
pathSeparator //与系统有关的路径分割符。例如 ;
list(); //返回由此抽象路径名所表示的目录中的文件和目录的名称所组成字符串数组。
listFiles();//返回一个抽象路径名数组,这些路径名表示此抽象路径名所表示目录中的文件。
删除:delete(); //文件不一定能删除,删除成功返回true,否则返回假。
deleteOnExit(); //虚拟机终止时,文件一定删除。
判断:canExecute(); //文件是否能执行。
exists(); //文件是否存在。
isDirectory(); //是不是一个目录。
isFile(); //是不是一个文件。
isHidden(); //是否是隐藏文件。
isAbsolute(); //是否是一个绝对路径。
获取:getName();
getPath();
getAbsolutePath(); //返回抽象路径名的绝对路径名字符串。
getAbsoluteFile(); //返回抽象路径名的绝对路径名形式。
lastModified(); //最后修改时间。
length(); //文件的长度。
list(); //打印指定路径下文件和文件夹的名称,返回一个String数组。
File.listRoots(); //列出系统的可用盘符,返回一个File数组。
Properties类:是集合和IO的结合体。是hashTable的子类。
getProperty(String key); //通过指定的键获取值。
list(PirntStream p); //将属性列表输出到指定的流中。
setProperty(String key,String value); //设置键和值。
load(InputStream inStream); //从输出流中加载键值对。
store(OutputStream out, String comments); // 定义一个输出流,将集合的数据读出。
字符编码:编码:字符串变成字节数组。“string”.getBytes();
解码:字节数组变字符串。new String(byte[]);
能够加入编码表的流有:InputStreamReader,OutputStreamWriter,PrintStream,PrintWriter
如果编码过程中gbk数据用了iso8859码表编码,对方用iso8859码表解析了此数据,此数据将无法复原解析,因为在编码时已经产生乱码。
如果编码过程中gbk数据用了gbk码表编码,对方用iso8859码表解析了此数据,只要再将此数据用iso8859码表编码后再用gbk解析即可。
装饰设计模式:当想要对已有的对象进行功能增强时,可以定义类,将已有的对象传入,基于已有的功能,并提供加强功能,那么自定义的类称为装饰类。
装饰设计模式与继承相比,要比继承灵活,避免了继承体系的臃肿,降低了类与类之间的联系。装饰类因为是增强已有类,所以具有的功能
和被装饰类是一样的,只不过是进行了加强,所以通常装饰类和被装饰类通常同属一个体系。