File类的构造方法
方法声明 | 功能描述 |
---|---|
File(String pathname) | 通过指定的一个字符串类型的文件路径来创建一-个新的File对象。 |
File(String parent, String child) | 根据指定的一个字符串类型的父路径和一个字符串类型的子路径 (包括文件名称)创建一个File 对象。 |
File(File parent, String child) | 根据指定的File类的父路径和字符串类型的子路径(包括文件名称) 创建一个File对象 |
File类常用方法
文件属性{
boolean exists():测试文件是否存在
boolean canWrite():测试文件是否可写
boolean canRead():测试文件是否可读
boolean isFile():测试当前文件是否是文件
boolean isDirectory():测试当前文件是否是目录
long lastModified():获取文件最后一次修改时间
long length():获取文件的长度,以字节为单位
boolean delete():删除当前文件
boolean renameTo(File dest):重命名当前File对象表示的文件
String getAbsolutePath():获取文件的绝对路径
String getName():获取文件的名称
boolean mkdir():创建当前File对象指定的目录
public String[] list(): 以字符串数组返回当前文件夹下的所有文件
public File[] listFiles(): 以文件数组返回当前文件夹下的所有文件
public String[] list(FilenameFilter filter)
public File[] listFiles(FilenameFilter filter)
**}**
FilenameFilter
FilenameFilter它是一个接口。
boolean accept(File dir,String filename)
由此来限制由list()方法返回的文件数量,使
之只返回符合某一过滤器的文件。
IO流的分类
第一种分类方法:按数据流的方向不同
可以分为输入流和输出流。
如果数据是从外界流入程序的,则是输
入流,反之则是输出流。
第二种分类方法:按是否直接操作源
或者目标节分为节点流和装饰流。
第三种分类方法:按处理数据单位不同
可以分为字节流和字符流。
字节: byte,8bit, 最基础的存储单位。
字符: a-z,8000。
字节流
I0流中针对字节的输入输出提供了一系列的流,统称为字节流。
字节流是程序中最常用的流,根据数据的
传输方向可将其分为字节输入流和字节输出流。
在io包中,提供了两个抽象类InputStream和
OutputStream,它们是字节流的顶级父类。
字节输入流:
方法声明 | 功能描述 |
---|---|
int read() | 从输入流读取一个8位的字节,把它转换为0~255之间的整数,并返回这一整数 |
int read(byte[] b) | 从输入流读取若干字节,把它们保存到参数b指定的字节数组中,返回的整数表示读取字节的数目。 |
int read(byte[] b,int off, int len) | 从输入流读取若干字节,把它们保存到参数b指定的字节数组中,off指定字节数组开始保存数据的起始下标,len表示读取的字节数目。 |
void close() | 关闭此输入流并释放与该流关联的所有系统资源。 |
第一个read()方法是从输入流中逐个读入字节,而第二个和第三个
read()方法则将若干字节读入到字节数组中,从而提高读数据的效率。
字节输出流:
方法名 | 说明 |
---|---|
close() | 关闭此输出流并释放与此流有关的所有系统资源。 |
flush() | 刷新输出流,即使缓冲区未满强制输出缓冲区中的字节。 |
write(byte[] b) | 将b.length个字节从指定的byte数组写入此输出流。 |
write(byte[] b, int off, int len) | 将指定byte数组中从偏移量off开始的len个字节写入此输出流 |
write(int b) | 将指定的字节写入此输出流。 |
输入输出子类图
缓冲区
实现缓冲区的两种方式:
1.字节数组缓冲区
2.字节缓冲区
字符流
字符流的两个抽象的顶级父类为Reader和Writer。
字符流操作文件
如果想从文件中直接读取字符可以使用字符输入流FileReader,通过此流可以从关联的文件中读取一个或一组字符。
转换流
有时字节流和字符流之间需要进行转换
InputStreamReader和OutputStreamWriter。
有时字节流和字符流之间需要进行转换
InputStreamReader和OutputStreamWriter。
界面设计
创建文件输入流对象去关联文件
然后用数据流DataInputStream在去包装刚刚创建的文件输入流
接着用转换流InputStreamReader转换为Reader类型的对象
用它去包装了刚刚建好的FileInputStream类型的对象
最后调用缓冲流BufferedReader去装饰InputStreamReader
构建了一个BufferedReader对象去传递刚刚创建好的InputStreamReader对象
装饰设计模式
装饰设计模式就是将程序的主体部分
和装饰部分分离,即将变化较小的部分和
容易变化的部分分开。
interface IDE{
void getFunction();
}
//程序主体实现了IDE接口
class Eclipse implements IDE{
public Eclipse() {
}
public void getFunction() {
System.out.println("Eclipse环境的基本功能");
}
}
//插件 装饰部分也实现了IDE接口
class PlugIn implements IDE{
private IDE ide;
public PlugIn(IDE ide) {
super();
this.ide=ide;
}
public void getFunction() {
ide.getFunction();
}
}
class WTP extends PlugIn{
public WTP(IDE ide) {
super(ide);
}
public void getFunction(){
super.getFunction();
System.out.println("具有了开发WEB应用程序的功能!");
}
}
class VE extends PlugIn{
public VE(IDE ide) {
super(ide);
}
public void getFunction() {
super.getFunction();
System.out.println("具有了开发图形用户界面程序的功能");
}
}
public class EclipseSimulate{
public static void main(String[] args) {
IDE eclipse=new Eclipse();
IDE eclipseWithWTP=new WTP(eclipse);//得到安装了WTP插件的Eclipse
eclipseWithWTP.getFunction();
IDE eclipseWithVE =new VE(eclipse);
eclipseWithVE.getFunction();
}
}