1、java.io.File类
File类是文件和目录路径名的抽象描述
常用的API:
(1)String getName():获取文件或目录名称
(2)String getPath():获取文件或目录的路径(获取创建File对象时填写的路径)
(3)String getAbsolutePath() :获取文件或目录的绝对路径
(4)long lenth():获取文件的长度,单位为字节
(5)long lastModified():获取最后修改时间,单位为毫秒
(6)String getParent():获取上级或父目录
(7)boolean isFile():判断是否为文件,是则返回true
(8)boolean isDirectory():判断是否为目录,是则返回ture
(9)boolean exists():是否存在
(10)boolean isHidden():是否隐藏
(11)boolean canWrite():是否可写
(12)boolean canRead():是否可读
(13)String[] list():获取下一级名称
File[] listFiles():获取下一级的File对象
File[] listFiles(FileFilter filter):获取下一级的File对象,可以过滤一些文件或目录
(14)boolean createNewFile():创建文件
static File createTempFile(String prefix, String suffix) :在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。
(15)boolean mkdir:创建目录
boolean mkdirs:创建多级目录
(16)delete(): 删除文件或空目录
(17)boolean renameTo():重命名文件或目录
2、IO流的四大抽象基类
1、四大超类
(1)InputStream:字节输入流
(2)OutputStream:字节输出流
(3)Reader:字符输入流
(4)Writer:字符输出流
2、分类
(1)按照方向分:输入流和输出流
(2)按照处理方式的不同:分为字节流和字符流(字符流只能处理纯文本的数据,使用范围很小)
(3)按照角色不同:节点流和处理流(处理流是建立在节点流的基础上的,处理流需要包装一个节点流的对象)
3、API
(1)InputStream:
int read():一次读取一个字节,返回的是本次读取的字节的值,流末尾返回-1
int read(byte[] data):一次读取多个字节,读取到的数据存储到data[]数组中,最多读取data.lenth个字节,返回的是本次读取的字节的个数,流末尾返回-1,从data[0]开始存储
int read(byte[] data,int offset,int len):一次读取多个字节,读取到的数据存储到data[]数组中,最多读取len个字节,返回的是实际本次读取的个数,流末尾返回-1,从data[offset]开始存储
void close():关闭流,释放资源
(2)OutputStream:
void write(int data):一次写一个字节
void write(byte[] data):一次写一整个数组
void write(byte[] data , int offset ,int len):一次写一部分,从数组的索引offset开始,写入len个
void close:关闭流,释放资源
void flush():刷新(一般都是配合缓冲流一起使用,刷新缓存区中的数据 )
(3)Reader
int read():一次读取一个字符,返回的是本次读取值的unicode值,流末尾返回-1
int read(char[] data):一次读取多个字符,读取到的数据存储到data[]数组中,最多读取data.lenth个字节,返回的是本次读取的字符的个数,流末尾返回-1,从data[0]开始存储
int read(byte[] data,int offset,int len):一次读取多个字符,读取到的数据存储到data[]数组中,最多读取len个字符,返回的是实际本次读取的个数,流末尾返回-1,从data[offset]开始存储
void close():关闭流,释放资源
(4)Writer
void write(int data):一次写一个字符
void write(char[] data):一次写一整个数组
void write(char[] data , int offset ,int len):一次写一部分,从数组的索引offset开始,写入len个
void write(String str):一次写整个字符串
void write(String str , int offset ,int len):一次写一部分字符串,从数组的索引offset开始,写入len个
void close:关闭流,释放资源
void flush():刷新(一般都是配合缓冲流一起使用,刷新缓存区中的数据 )
3、文件IO流
1、类型
FileInputStream:文件字节输入流,可以读取任意类型的文件
FileOutputStream:文件字节输出流,可以把字节数据输出到任意类型的文件
FileReader:文件字符输入流,只能读取纯文本的文件,按照平台默认的字符编码进行解码
FileWriter:文件字符输出流,只能把字符输出到纯文本文件中,按照平台默认的字符编码进行编码
2、读写文件的代码
public void copy(File src , File dest) throws IOException{
FileInputStream fis = new FileInputStream(src);
FileoutputStream fos = new FileOutputStream(dest);
byte[] data = new data[1024];
while(ture){
int len = fis.read(data);
if(len == -1){
break;
}
fos.write(data , 0 , len);
}
fis.close();
fos.close();
}
4、缓冲IO流
1:分为
BufferedInputStream:字节缓存输入流,给InputStream系列的IO流增加缓冲效果
BufferedOutputStream:字节缓冲输出流,给OutputStream系列的IO流增加缓冲效果
BufferedReader:字符缓冲输入流,给Reader系列的IO流增加缓冲效果
新增API String readLine():按行获取
BufferedWriter:字符缓冲输出流,给Writer系列的IO流增加缓冲效果
新增API void newLine():输出换行符(用于跨平台跨语言使用,例如C)
2:默认的缓冲区大小是8192 = 1024 * 8 (字符 /字节)
3:可以给读写的过程提高效率
不仅仅是可以给文件IO流增加缓冲效果,也可以给任何符合对应类型的IO流增加缓冲效果
实例代码:
public void copyBuffered(File src , File dest) throws IOException{
FileInputStream fis = new FileInputStream(src);
FileoutputStream fos = new FileOutputStream(dest);
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(fos);
byte[] data = new data[1024];
while(ture){
int len = fis.read(data);
if(len == -1){
break;
}
fos.write(data , 0 , len);
}
bis.close();
fis.close();
bos.close()
fos.close();
}
5、编码与解码的IO流(转换流)
1、编码:OutputStreamWriter
可以把字符流转为字节流输出,并且在转换的过程中可以指定编码。
2、解码:InputStreamReader
可以把字节输入流转换为字符输入流,并且在转换的过程中,可以指定字符解码。
3、示例代码:解码(文件是GBK,当前平台是UTF-8)
public void test() throws IOException{
FileInputStream fis = new FileInputStream("d:/testfile.txt");
InputStreamReader isr = new InputStreamReader(fis,"GBK");
BufferedReader br = new BufferedReader(isr);
String line;
while(line = br.readLine() != null){
System.out.println(line);
}
br.close
isr.close();
fis.close();
}
4、示例代码:编码(文件是GBK,平台是UTF-8)
public void test() throws IOException{
String str = "File文件编码测试";
FileOutputStream fos = new FileOutputStream("d:/File测试.txt",ture);
OutoutStream osw = new OutoutStream(fos , "GBK");
osw.write("\r\n");
osw.write(str);
osw.close();
fos.close();
}
## 数据IO流
1、类型
DataInputStream:允许应用程序以与机器无关方式从底层输入流中读取基本java数据类型+字符串
DataOutputStream:允许应用程序以适当方式将java数据类型和字符串写入输出流中
它两必须要配对使用,读的顺序要与写的顺序一致
## 对象IO流
1、类型
ObjectOutputStream:对象序列化,输出对象,把对象转换为字节序号输出
ObjectInputStream:对象反序列化,读取对象,把字节序列重构java对象
2、API
ObjectOutputStream:writeObject(对象)
ObjectInputStream: Object readObject()
3、序列化需要注意哪些内容
(1)所有要序列化的对象类型必须实现java.io.Serializable接口
如果对象的属性类型也是引用数据类型,也要实现该接口
(2)类的修改后为了对象的反序列化不受影响,那么可以增加一个序列化版本ID
private static final long serialVersionID = 1L;
(3)如果有些属性不想序列化可以在其定义时加上transient关键字
(4)某个属性前有static修饰,那么该属性也不参与序列化
4、除了Serializable接口之外,还可以实现java.io.Externalizable接口,但是要求重写
void readExternal(ObjectInput in)
void writeExternal(ObjectOutput out)