File类和IO流
1. File类
1.1 File类介绍和构造方法
File是SUN公司提供给程序员操作文件或者文件夹的一个类
只是针对于文件或者文件夹操作,不涉及文件的内容。
地址
相对路径
我在隔壁
. 当前工作目录
.. 当前工作目录的上级目录,或者说是父目录
绝对路径
河南省郑州市二七区**小区一号楼一单元101
Servlet 网络资源路径
404 Source Not Found 天天404 刷新404 重启404 500
根目录:
Windows操作系统根目录
对应盘符 C D E F G
Linux操作系统没有分区概念
/ 根目录
构造方法:
File(String pathName);
根据指定的路径,创建对应文件或者文件夹的File类对象
File(String parent, String childName);
根据指定的父目录路径,和对应的子文件或者子文件夹名,创建对应的File类
对象
File(File parent, String childName);
根据指定的父目录File类对象,和对应的子文件或者字文件夹名,创建对应的
File类对象
1.2 创建文件和文件夹
创建文件:
boolean createNewFile();
使用File类对象调用,创建对应当前File类对象中保存文件地址的文件
创建成功返回true,失败返回false
失败原因:
1. 文件路径不合法
2. 对应操作的文件夹没有写入权限
rwxr-xr-x
3. 对应当前文件已经存在
4. 磁盘GG
创建文件夹:
boolean mkdir();
使用File类对象调用,创建对应File类对象保存文件夹地址的对应文件夹
创建成功返回true,失败返回false
失败原因同上
boolean mkdirs(); BT
重命名,移动文件或者文件夹:
boolean renameTo(File dest);
使用File类对象调用,把当前File类对象对应的文件,重命名,移动成目标文件dest
1.3 删除文件夹和文件夹
boolean delete();
使用File类对象调用,立即删除对应File类对象的文件或者文件夹,并且是从硬盘中抹去数据,而不是放入回收站!!!
【注意】
如果删除的是非空文件夹,无法操作,有且只能删除空文件夹
void deleteOnExit();
当程序退出时删除对应的文件或者文件夹!!!
一般用于日志文件删除,缓存文件删除......
1.4 获取文件或者文件夹属性
String getPath(); 获取路径
String getParent(); 获取父目录
String getName(); 或文件或者文件夹名字
String getAbsolutePath(); 获取当前文件或者文件夹对应的绝对路径【有用】
File getAbsoluteFile(); 获取当前文件或者文件夹对应的绝对路径File类对象【有用】
long length();
获取当前文件对应的字节数
long lastModified();
获取当前文件或者文件夹的最后一次修改时间,时间采用的方式是【时间戳】。时间戳是从1970年1月1日 00:00:00 到现在的秒数。
2019年12月17日 11:37:15
1.5 判断方法
boolean isfile(); 是否是普通文件
boolean isDirectory(); 是否是文件夹
boolean isHidden(); 是否是隐藏文件
boolean isAbsolute(); 是否创建使用的是绝对路径
boolean exists(); 文件或者文件夹是否存在
1.6 文件列表方法
static File[] listRoots();
获取所有根盘符File类对象
String[] list();
获取指定文件夹子文件和子文件夹名字String类型数组
File[] listFiles();
获取指定文件夹子文件和子文件夹File类对象数组
1.7 FilenameFilter文件名过滤器
思想:
数据需要过滤之后才可以做一些其他操作!!!
interface FilenameFilter
boolean accept(File dir, String name);
dir:当前操作对应的文件夹类对象
name: 工作路径下的子文件夹名字和子文件名字
2. IO流
2.1 什么是IO
I
Input 输入
O
Output 输出
输入输出的参照物:
当前程序运行使用内存
数据从内存流出,输出
数据从外部流入到内存,输入
操作数据的单位:
字节流
可以用于任意类型文件操作
字符流
只能处理使用记事本打开的可视化文本文件操作。
InputStream 字节输入流
FileInputStream 文件操作字节输入流
OutputStream 字节输出流
FileOutputStream 文件操作字节输出流
Reader 字符输入流
FileReader 文件操作字符数入流
Writer 字符输出流
FileWriter 文件操作字符输出流
2.2 缓冲
数据缓冲之后会提高用户体验!!!
IO流中缓冲能够解决的问题,做突出的体验就是内存和硬盘之间的关系!!!
缓冲的使用可以极大的提供文件操作效率,减少内存和硬盘之间的读取次数。从而保护硬盘。
BufferedInputStream 缓冲字节输入流
BufferedOutputStream 缓冲字节输出流
BufferedReader 缓冲字符输入流
BufferedWriter 缓冲字符输出流
【注意】
所有的缓冲流,只是一个缓冲,没有任何的读写文件的能力,这里都需要对应的字节流和字符流来提供对应的操作文件能力。
2.3 字节缓冲流操作
2.3.1 字节缓冲输入流读取文件
File file = new File("D:/aaa/2.txt");
FileInputStream in = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(in);
int length = -1;
byte[] buf = new byte[1024 * 8];
while ((length = bis.read(buf)) != -1) {
System.out.println(new String(buf, 0, length));
}
bis.close;
2.3.2 字节缓冲输出流写入文件
File file = new File("D:/aaa/你猜这个文件有没有.txt");
FileOutputStream fileOutputStream = new FileOutputStream(file);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
bufferedOutputStream.write("Hello World!!!".getBytes());
bufferedOutputStream.close();
2.3.3 文件拷贝
package com.qfedu.c_io;
import java.io.*;
public class Demo3 {
public static void main(String[] args) throws IOException {
long start = System.currentTimeMillis();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\JavaEE\\视频\\123.mp4"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:/aaa/456.mp4"));
byte[] buf = new byte[1024 * 16];
int length = -1;
while ((length = bis.read(buf)) != -1) {
bos.write(buf, 0, length);
}
bos.close();
bis.close();
long end = System.currentTimeMillis();
System.out.println(end - start);
}
}