---------------------- android培训、java培训、期待与您交流! ----------------------
File类概述
·文件和目录路径名的抽象表示形式。
·用来将文件或者文件夹封装成对象
·方便对文件与文件夹的属性信息进行操作。
·File对象可以作为参数传递给流的构造函数。
File类常见方法:
1、创建
booleancreatNewFile();在指定位置创建文件,如果该文件已经存在,则不创建。返回false。创建成功并返回true。
和输出流(写)不一样。输出流对象一建立就会创建文件。而且文件已经存在,会覆盖。 boolean mkdir:创建文件夹
boolean mkdirs:创建多级目录
File.separator:跨系统平台的目录分隔符
2、删除
boolean delete():删除失败返回false。
void deleteOnexit();在程序退出时删除指定文件。
3、判断[day20-3]
boolean exists():文件是否存在。
canExecut()://是否可以执行。
isFile();
isDirectory();
isHidden();//是否隐藏。
isAbsolute();
在判断文件对象是否是文件或者目录时,必须要先判断该文件对象封装的内容是否存在。
通过exits判断。
4、获取信息。
getName();
getPath();//封装什么,获取什么。
getParent();//该方法返回的是绝对路径中的文件父目录,如果获取的是相对路径则返回null,如果相对路径中有上级目录则返回上级目录。
getAbsolutePath();//返回绝对路径
getAbsoluteFile();//返回绝对路径,但是将路径封装成对象。
long lastModified();//最后修改时间。
long length();//返回文件的长度。
文件列表:[day20-05]
static File[] listRoots();//返回根目录。获取盘符。
String[] list();//调用list方法的File对象必须是封装了一个目录,该目录必须存在。
File.list();//返回目录下的文件夹和文件名。
·FilenameFilter接口:
只有一个方法:boolean accept(File dir, String name);
递归:
函数自己调用自己的表现形式或者编程手法。
应用场景:
当某一功能要重复使用时。(如列出目录下所有内容,删除带内容的目录等)
递归要注意:递归详解[day20-07]
1、 限定条件,递归时一定要明确结束条件。
2、注意递归的次数,尽量避免内存溢出。
Properties类
properties是hashtable的子类。
具备Map集合的特点,而且里面存储的键值对都是字符串。
是集合中和IO技术相结合的集合容器。
特点:可用于键值对形式的配置文件。(可以实现应用程序数据的共享)
Object setProperty(String key, String value);//调用 Hashtable的方法put。
String getProperty();
Set<String> stringPropertyNames();
IO包中的其他类
打印流:PrintWriter PrintStream
该流提供了打印的方法,可以将各种数据类型的数据都原样打印。
字节打印流
PrintStream
构造函数可以接收参数类型。
1、file对象:File
2、字符串路径:String
3、字节输出流:OutputStream
字符打印流(web常用)
PrintWriter构造函数可以接收:
1、file对象:File
2、字符串路径:String
3、字节输出流:OutputStream
4、字符输出流:Writer
序列流[day20-15]
SequenceInputStream:用于对多个流进行合并。
操作对象
ObjectInputStream与ObjectOutputStream(成对出现)
被操作的对象需要实现Serializable(标记接口,没有方法的接口);
对象的序列化:
ObjectOutputStream的方法:
write();//写入一个字节(最低8位)。
writeInt();//写入一个32位的int值。
writeObject();//将指定对象写入ObjectOutputStream
ObjectInputStream的方法:
readObject();
序列号:serialVersionUID(默认根据成员计算出来的)
自定义序列号:public static final long serialVersionUID = xxx
静态成员变量是不能被序列化的。
成员变量如果不想被序列化,可以使用transient修饰。
一般被序列化后的文件使用“.object”文件名。
管道流
PipedInputStream和PipedOutputStream
输入输出可以直接进行连接,通过结合线程使用。涉及多线程技术。
PipedInputStream的方法:connect(PipedOutputStream src);
RandomAccessFile
该类不算是IO体系中子类而是直接继承自Object
但是它是IO包成员,因为它具备读和写的功能。
内部封装了一个数组,而通过指针对数组元素进行操作,可以通过getFilePointer获取指针位置,同时可以通过seek改变指针位置。
其实完成读写的原理就是内部封装了字节输入流和输出流。
通过构造函数,可以看出该类只能操作文件。而且操作文件还有模式:只读r.读写:rw.
RandomAccessFile(File file,String mode)
RandomAccessFile(String name,String mode)
方法:
write()与writeInt():前者只写一个字节8位。使用后者writeInt()写四个字节32位。
如果模式为只读 r、不会创建文件。会去读取一个已存在的文件,如果该文件不存在,则会出现异常。模式若是只读,可以屏蔽掉写的动作。
如果为rw:操作的文件不存在,会自动创建。如果存在,不会覆盖。
而且该对象的构造函数要操作的文件不存在,会自动创建。如果存在,不会覆盖。至增添内容。
操作指针: seek:raf.seek(8*1);指定的数据写入,数据分段写入。实际可用。
操作基本数据类型
DataStream类 DataInputStream与 DataOutputStream
可以用于操作基本数据类型的流对象。
DataInputStream方法:
readInt();
readBoolean();
readDouble();
readUTF();
DataOutputStream方法:
writeInt();//写入四个字节的int数据。
writeBoolean();
writeDouble();
writeUTF();//与readUTF()成对出现。
操作字节数组
用于操作字节数组的流对象。ByteArrayInputStream与ByteArrayOutputStream
用流的读写思想来操作数组。
ByteArrayInputStream:在构造的时候,需要接收数据源,而且数据源是一个字节数组。包含一个内部缓冲区,关闭此流无效,在构造时需要接收数据源(字节数组)。
ByteArrayOutputStream:在构造的时候,不用定义数据目的,因为该对象中已经内部封装了可变长度的字节数组。这就是数据的目的地。
其中的数据会被写入一个字节数组,缓冲区会随着数据的不断写入而自动增长(可变长度)。可使用toByteArray()和toString()获取数据,关闭此流无效。
因为这两个流对象都操作数组,并没有使用系统资源,所以不用进行close关闭动作。
在流操作规律讲解时:[day21-05]
源设备:
键盘 System.in;硬盘 FileStream;内存 ArrayStream(数组流);
目的设备:
控制台System.out;硬盘 FileStream;内存ArrayStream;
操作字符数组
·CharArrayReader与CharArrayWrite
操作字符串
·StringReader与StringWriter
字符编码[day21-06]
·字符流的出现为了方便操作字符。
·更重要是的加入了编码转换。
·通过子类转换流来完成。
InputStreamReader
OutputStreamWriter
·在两个对象进行构造的时候可以加入字符集。
编码表的由来:
·计算机只能识别二进制数据,早期由来是电信号。
·为了方便应用计算机,让它可以识别各个国家的文字。
·就将各个国家的文字用数字来表示,并一一对应,形成一张表,这就是编码表。
常见的编码表:
ASCII:美国标准信息交换码。用一个字节的7位可以表示。
ISO8859-1:拉丁码表,欧洲码表。用一个字节的8位表示。
GB2312:中国的中文编码表。
GBK:中国的中文编码表升级,融合了更多的中文文字符号。
Unicode:国际标准码,融合了多种文字。所有文字都用两个字节(65535)来表示,Java语言使用的就是unicode。
UTF-8 :最多用三个字节来表示一个字符。
转换流的编码应用:
·可以将字符以指定编码格式存储。
·可以对文本数据指定编码格式来解读。
·指定编码表的动作由构造函数完成。
编码:字符串(String)-->字节数组(byte[])
str.getBytes(charsetName); String --> byte[]: str.getBytes(charsetName);
解码:字节数组(byte[])-->字符串(String)
new String(byte[],charsetName);
byte[] --> String : new String(byte[],charsetName);
另外有:String.valueOf(char[] data)
数组变成字符串:Arrays.toString();
[day21-09] Test 学生成绩练习中强性逆转比较器:Collections.reverseOrder();
Comparator<Student> cmp = Collections.reverseOrder();//强性逆转比较器。
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima