File(文件):对应实际的文件或文件夹
也可以用来代表不存在的目录或文件
File file = new File( "文件名" ); // 可以使用 / 作为分隔符,也可以使用 \ 作为分隔符,\ 需要转义一下 \\
File的常用方法:
.isFile() ; 返回一个布尔值代表是否是文件
.isDirectory(); 返回一个布尔值代表是否是目录
.mkdir() 来创建一个目录
.mkdirs() 可以用来创建多级目录
.delete(): 删除该文件
.deteleOnExit(): 在程序结束时删除文件
.exists() 用来判断一个文件或目录是否存在
.listFiles() 得到一个目录下的所有子目录和文件
可以使用 FilenameFilter接口 来过滤需要的文件或文件夹
例: File[] files = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
if (name.startsWith("笔")) {
return true;
} else {
return false;
}
}
});
for(File f :files) {
System.out.println(f);
}
.renameTo():重命名文件
应用: 可以重命名并且移动该文件
new File("C:/1.txt").renameTo(new File("D:/2.txt"));
// 将 C盘中的 1.txt 移动到 D盘中,并且更改为 2.txt
System.getProperty("user.dir"): 获取当前目录
File .getAbsoluteFile(): 返回此抽象路径名的绝对路径名形式, 获取绝对路径(全路径,带盘符的)
String .getAbsolutePath(): 返回此抽象路径名的绝对路径名的字符串形式
IO流:用来处理设备之间的数据传输
Java对数据的操作都是通过流来进行的
特点: 流是单向的,重复读时可能会发生错误;
(相对于内存的) Input: 输入 往内存中读入数据
Output: 输出 往内存中写出数据
IO流按数据类型分为两大部分:
1 : 字节流: InputStream / OutputStream (抽象类)
2 : 字符流: Reader / Writer(抽象类)
字节流: 以字节为单位从流中读取或往流中写入信息,通常用来读取二进制数据
如图象,声音,视频。
即IO包中的inputstream类和outputstream类的派生类。
FileInputStream: 文件输入流
FileOutputStream: 文件输出流
实现文件的复制:
字符流: 以字符为单位处理流的内容,主要是解决字符国际化问题
原先的I/O类库只支持8位的字节流,因此不可能很好地处理
16位的Unicode字符流,所以提供了 Reader 和 Writer
Reader: 字符输入流 InputStreamReader 将字节输入流 转化 为字符输入流
Writer: 字符输出流 OutputStreamWriter 将字节输出流 转化 为字符输出流
利用转换流进行文件的复制:
在IO流中,为了方便我们对数据的读取实现一行一行的读取,Java为我们提供了一个 字符缓冲流 的东西,
(BufferedReader / BufferedWriter )方便我们 高效的 一行一行的读取数据
高效的复制文件内容:
扩充:
设计模式:
1)享元设计模式: 节省内存的使用,重复利用一些对象
例如 String常量池,Integer.vauleOf(1) == Integer.valueOf(1)
2) 装饰设计模式: 为了扩展某个方法,而又不想通过继承来实现(避免代码的过分笨重,减少耦合性),
所以就只需要继承他们共同的父类来实现扩展功能
(1)装饰者与被装饰者需要有一个共同的父类
(2)装饰者和被装饰者之间体现的是组合的关系,而不是继承的关系(目的是为了更加灵活)
(3)装饰者会对被装饰者做功能上的增强
例如: BufferedReader(装饰者) 和 InputStreamReader( 被装饰者 ),扩展了 readLine() 功能