文件操作—IO
文件操作—IO
- 🔎认识文件
- 🌻文件的组织结构
- 🌻文件的相对路径与绝对路径
- 🌼根据相对路径寻找文件
- 🌻二进制文件与文本文件
- 🔎文件系统操作
- 🌻File类的用法
- 🌼构造 file 对象
- 🌼创建与删除文件
- 🌼创建目录
- 🌼读取目录的内容
- 🌼重命名
- 🌻InputStream 与 OutputStream
- 🌼InputStream
- 🌼OutputStream
- 🔎结尾
🔎认识文件
一般所说的文件,都是指硬盘上的文件
🌻文件的组织结构
根据上图
可以看到文件系统是以N叉树形结构来组织目录(文件夹)和文件的
🌻文件的相对路径与绝对路径
绝对路径:从盘符开始,一层一层往下找,这个过程得到的路径,称为绝对路径(包含了盘符)
相对路径:从给定的某个目录出发,一层一层往下找,这个过程得到的路径,称为相对路径(省略了盘符)
🌼根据相对路径寻找文件
根据相对路径,找到图片中红色圈圈表示的文件
case1🥝
如果基准目录是上图所示
那么文件的相对路径为. / 剑指offer第二版 / 剑指OFFER 名企面试官精讲典型编程题 第2版.pdf
case2🥝
如果基准目录是上图所示
那么文件的相对路径为. / 相关书籍 / 剑指offer第二版 / 剑指OFFER 名企面试官精讲典型编程题 第2版.pdf
case3🥝
如果基准目录是上图所示
(注意这里的目录 : 数据结构和算法 与 剑指offer第二版是平级关系)
那么文件的相对路径为. . / 剑指offer第二版 / 剑指OFFER 名企面试官精讲典型编程题 第2版.pdf
总结
一个点 . 表示当前目录
两个点 . . 表示当前目录上一级目录
🌻二进制文件与文本文件
文本文件
存储的是文本,文本文件的内容都是由ASCII字符构成的,后面也搞了些其他的编码方式,如utf8,Unicode等
文本文件所存储的数据,是遵守ASCII或者其他字符集编码,所得到的文件
二进制文件
存储的是二进制数据
没有任何字符集的限制(不受限制,存什么都可以)
🔎文件系统操作
🌻File类的用法
🌼构造 file 对象
public static void main(String[] args) throws IOException {
//构造file对象
//File file = new File("d:/Csdn截图上传/5.png");
File file = new File("./Csdn截图上传/5.png");
//获取父路径
System.out.println(file.getParent());
//获取文件名
System.out.println(file.getName());
//获取文件路径
System.out.println(file.getPath());
//获取文件绝对路径
System.out.println(file.getAbsolutePath());
//获取文件修饰过的绝对路径
System.out.println(file.getCanonicalPath());
}
构造 file 对象
构造过程中,可以使用相对路径 或 绝对路径 进行初始化
路径指向的文件,可以是存在的,也可以是不存在的
🌼创建与删除文件
public static void main(String[] args) throws IOException {
// ./在相对路径中可以省略
//File file = new File("./hello_world.txt");
File file = new File("hello_world.txt");
//判定是否存在
System.out.println(file.exists());
//判定是不是目录
System.out.println(file.isDirectory());
//判定是不是文件
System.out.println(file.isFile());
//创建文件
file.createNewFile();
System.out.println(file.exists());
System.out.println(file.isDirectory());
System.out.println(file.isFile());
//删除文件
file.delete();
System.out.println("删除文件之后");
System.out.println(file.exists());
}
🌼创建目录
public static void main(String[] args) {
File file1 = new File("test_dir");
File file2 = new File("test_dir/aaa/bbb");
//创建单级目录
file1.mkdir();
//创建多级目录
file2.mkdirs();
}
🌼读取目录的内容
public static void main(String[] args) {
File file = new File("test_0");
//返回一个字符串数组
//表示该目录中的目录及文件
String[] rets = file.list();
System.out.println(Arrays.toString(rets));
//返回一个文件数组
//表示该目录中的目录及文件
File[] files = file.listFiles();
System.out.println(Arrays.toString(files));
}
🌼重命名
public static void main(String[] args) {
//目录名
File src = new File("./test_dir");
//期望的目录名
File dest = new File("./test_0");
//更改目录名为期望的目录名
System.out.println(src.renameTo(dest));
}
🌻InputStream 与 OutputStream
InputStream 与 OutputStream 针对的是二进制文件
InputStream(读)
OutputStream(写)
二进制文件 读写 的基本单位是字节
🌼InputStream
使用 InputStream打开文件后必须要关闭文件
上述代码可能存在由于打开文件后可能会执行一些其他的操作导致异常
以至文件未能关闭
所以不推荐这种写法
上述代码能够关闭文件
但是由于不够美观
是的,你没看错,代码也是讲究颜值的!!!
也不推荐使用
推荐这种写法
解释一下为什么这里不需要写 close()方法
InputStream实现了一个特定的接口(Closeable)
通过 Closeable接口,可以将带有资源的 try操作,在 try代码块结束后,自动执行 close()方法
读取文件🥝
public static void main(String[] args) throws IOException {
try(InputStream stream = new FileInputStream("d:/Csdn截图上传/test.txt")) {
while (true) {
//read() 无参数,一次只读取一字节
int b = stream.read();
//当 b == - 1时,全部读取完
if(b == -1) {
break;
}
System.out.println(b);
}
}
}
注意
这里打印出来的是读取到的字符的编码值
如果想要打印字符,可以写成如下格式
public static void main(String[] args) {
try(FileReader reader = new FileReader("d:/Csdn截图上传/test.txt")) {
while(true) {
int b = reader.read();
if(b == - 1) {
break;
}
char ch = (char)b;
System.out.println(ch);
}
} catch (IOException e) {
e.printStackTrace();
}
}
🌼OutputStream
写文件🥝
public static void main(String[] args) {
try(OutputStream stream = new FileOutputStream("d:/Csdn截图上传/test.txt")) {
stream.write('h');
stream.write('e');
stream.write('l');
stream.write('l');
stream.write('o');
} catch (IOException e) {
e.printStackTrace();
}
}
🔎结尾
创作不易,如果对您有帮助,希望您能点个免费的赞👍
大家有什么不太理解的,可以私信或者评论区留言,一起加油