JAVA File类&& IO流-字节流
File类 【掌握】
什么是File类
File类表示文件和目录(文件夹),在表示的时候不能只告诉程序文件或者目录的名称,
应该要告诉程序文件或者目录的路径
构造方法
告诉程序你要操作的文件/文件夹在哪里
File(String pathname)
File(String parent, String child)
File(File parent, String child)
* 构造方法中路径的特点:
1、可以是存在的路径也可以是不存在的
2、可以是文件路径也可以是文件夹路径
3、可以是相对路径也可以是绝对路径
路径的问题
绝对路径:以盘符开始的路径(完整的路径)
相对路径:不以盘符开始的路径(简化/省略路径)
当前路径相对的是项目根路径,以项目根路径为参照物
不是所有的绝对路径都可以省略写成相对路径的,只有这个
绝对路径中包含了项目根目录才可以写成相对路径
项目根路径:就是你项目存放的路径+项目名
D:\develop\JetBrains\IdeaProjects2020\javase2\a.txt -- 绝对路径
a.txt -- 相对路径
D:\develop\JetBrains\IdeaProjects2020\javase2\day11\dir\a.txt -- 绝对路径
day11\dir\a.txt -- 相对路径
E:\集合.xmind -- 绝对路径,该路径不能省略为相对路径
成员方法
对这个关联的文件/文件夹进行创建、删除、获取等操作
创建
文件
boolean createNewFile()
文件夹
boolean mkdir()
boolean mkdirs() :既可以创建单级也可以创建多级文件夹
删除
boolean delete()
既可以删除文件也可以删除文件夹,但是删除文件夹的时候只能删除空文件夹
删除不走回收站
判断和获取
public boolean isDirectory() 测试此抽象路径名表示的File是否为目录
public boolean isFile() 测试此抽象路径名表示的File是否为文件
* 以上这个两个方法是互斥的,不是文件就是文件夹,不是文件夹就是文件
前提:要求文件或者文件夹是存在的,如果不存在,那么这两个方法都会返回false
boolean exists() 测试此抽象路径名表示的File是否存在
String getName() 返回由此抽象路径名表示的文件或目录的名称
long length():可以获取文件的大小(字节数),不能获取到文件夹的大小
long lastModified() :获取到文件的最后修改时间的毫秒值
String getAbsolutePath() :获取绝对路径
File[] listFiles()
IO流-字节流 【掌握】
什么是IO流
输入输出流,用于处理设备(内存/硬盘[文件])之间的数据传输
输入还是输出是以内存为参照物的,从外界到内存是输入,输入进行的读取操作
从内存到外界是输出,输出进行的写出的操作
IO流的分类
按流向分
输入流和输出流
按操作的数据类型分
字节流和字符流
非纯文本文件只能使用字节流进行操作
纯文本文件既可以使用字节流也可以使用字符流
IO流的作用
1、文件复制
2、文件上传
3、文件下载
IO流的注意事项
1、IO流核心的每行代码都有异常,而且是编译时异常
2、IO流相关的类,都是位于java.io包下
3、IO流会占用系统资源,操作完之后不要忘记释放资源(关流)
字节流
字节流的体系结构
字节输入流
InputStream(抽象类)
|-FileInputStream:基本流
|-FilterInputStream
|-BufferedInputStream:缓冲流
字节输出流
OutputStream(抽象类)
|-FileOutputStream:基本流
|-FilterOutputStream
|-BufferedOutputStream:缓冲流
字节流的基本流
FileOutputStream
构造方法
FileOutputStream(String name)
FileOutputStream(String name, boolean append)
FileOutputStream(File file)
FileOutputStream(File file, boolean append)
成员方法
void write(int b):写出字节数据 int->byte
void write(byte[] b)
* write("\r\n".getBytes()) 换行
void write(byte[] b, int off, int len)
void close()
//1.创建字节输出流的对象
//注意点:1、如果文件不存在,会帮我们自动创建出来,但是要求文件路径要存在
// 2、如果文件存在,会把文件清空,再写出到文件
3、可以写相对路径,也可以写绝对路径
4、关联的路径永远只能是文件路径,不能是文件夹路径
FileOutputStream fos = new FileOutputStream("C:\\itheima\\a.txt");
//2,写数据
// 传递一个整数时,那么实际上写到文件中的,是这个整数在码表中对应的那个字符.
fos.write(98);// 98(十进制)->00000000 00000000 00000000 01100010(int、二进制)
// ->01100010(byte、二进制) ->写入到文件中,但是文本编辑器是一个编解码
// 编解码
// 编码:将我们人类能看懂的文字(字符)转为计算机看得懂的(二进制)
// 解码:将计算机看得懂的(二进制)转为我们人类能看懂的文字(字符)
//3,释放资源
fos.close(); //告诉操作系统,我现在已经不要再用这个文件了
FileInputStream
构造方法
FileInputStream(String name)
FileInputStream(File file)
成员方法
int read():一次读取一个字节,并返回读取到的字节,如果读取到了文件末尾,返回-1
int read(byte[] b):一次读取多个字节,并返回读取到数组中的有效字节个数,如果读取到了文件末尾,返回-1
void close()
//如果文件存在,那么就不会报错.
//如果文件不存在,那么就直接报错.
FileInputStream fis = new FileInputStream("bytestream\\a.txt");
int read = fis.read();
//一次读取一个字节,返回值就是本次读到的那个字节数据.
//也就是字符在码表中对应的那个数字.
//如果我们想要看到的是字符数据,那么一定要强转成char
System.out.println((char)read);
//释放资源
fis.close();
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ahir's Blog!
评论
GitalkDisqusjs