一、文件
File类
File对象属性:
static final String separator:存储了当前系统的路径分隔符,支持跨平台
boolean canRead(),boolean canWrite()
boolean exists()
long length() //字节单位
boolean isDirectory(),boolean isFile()
boolean isHidden()
long lastModified()
String getName(),String getPath(),String getParent()
String getAbsolutePath() //返回此File对象的绝对路径
File f = new File(“E:/abc.txt”);
f.createNewFile();//创建文件
F.mkdirs();//创建文件夹
F.exists();//判断文件或者文件夹是否存在
F.delete();//删除文件
F.getAbsolutePath();//获取文件路径
F.getName();//获取文件名称
F.length();//获取文件大小
F.renameTo();//在同一路径下是重命名,在不同路径下是剪切
二、IO流
I:input 输入(读取数据); O:output 输出(写入数据)。
字节流(stream):处理图片、音频、视频等二进制文件
InputStream : 字节输入流
OutputStream : 字节输出流
字符流 : 处理文本文件
Readeer : 字符输入流
Writer : 字符输出流
public static void met() {
//InputStream 抽象类
try {
FileInputStream file = new FileInputStream("E:/abc.txt");
byte[] bytes = new byte[40];
//读取信息
//param: 字节数组;把读取到的数据放到字节数组中
int a = file.read(bytes);//返回值:从文件读取到的字节数量,如果文件读取结束,返回-1
public static void met1() {
try {
FileInputStream fil = new FileInputStream("E:/abc.txt");
byte[] bytes = new byte[20];
int length = 0;
//read() 方法返回值为-1 读取结束
while((length=fil.read(bytes)) != -1) {
//验证
//param1:byte[] param2:int offset 偏移量(开始的索引) param3:length 长度(把指定内容转换成字符串)
String s = new String(bytes, 0, length);
System.out.println(s);
}
//关闭资源
fil.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
1. 输入字节流InputStream
字节输入流的抽象基类是InputStream,常用的子类是 FileInputStream和BufferedInputStream。
1)FileInputStream
文件字节输入流:一切文件在系统中都是以字节的形式保存的,无论你是文档文件、视频文件、音频文件…,需要读取这些文件都可以用FileInputStream去读取其保存在存储介质(磁盘等)上的字节序列。
FileInputStream在创建时通过把文件名作为构造参数连接到该文件的字节内容,建立起字节流传输通道。
然后通过 read()、read(byte[])、read(byte[],int begin,int len) 三种方法从字节流中读取 一个字节、一组字节。
2)BufferedInputStream
带缓冲的字节输入流:上面我们知道文件字节输入流的读取时,是直接同字节流中读取的。由于字节流是与硬件(存储介质)进行的读取,所以速度较慢。而CPU需要使用数据时通过read()、read(byte[])读取数据时就要受到硬件IO的慢速度限制。我们又知道,CPU与内存发生的读写速度比硬件IO快10倍不止,所以优化读写的思路就有了:在内存中建立缓存区,先把存储介质中的字节读取到缓存区中。CPU需要数据时直接从缓冲区读就行了,缓冲区要足够大,在被读完后又触发fill()函数自动从存储介质的文件字节内容中读取字节存储到缓冲区数组。
BufferedInputStream 内部有一个缓冲区,默认大小为8M,每次调用read方法的时候,它首先尝试从缓冲区里读取数据,若读取失败(缓冲区无可读数据),则选择从物理数据源 (譬如文件)读取新数据(这里会尝试尽可能读取多的字节)放入到缓冲区中,最后再将缓冲区中的内容返回给用户.由于从缓冲区里读取数据远比直接从存储介质读取速度快,所以BufferedInputStream的效率很高。
2.. 输出字节流OutputStream
定义和结构说明:IO 中输出字节流的继承图可见上图,可以看出:
OutputStream 是所有的输出字节流的父类,它是一个抽象类。
ByteArrayOutputStream、FileOutputStream是两种基本的介质流,它们分别向Byte 数组、和本地文件中写入数据。PipedOutputStream 是向与其它线程共用的管道中写入数据,
ObjectOutputStream 和所有FilterOutputStream的子类都是装饰流。具体例子跟InputStream是对应的。