IO流技术:开篇概述、File对象构建与相关方法的使用
本篇包含开篇知识储备,API使用规则、如何构建File对象、以及相关方法的使用。会通过Java编码分析。
API | 说明 |
---|---|
pathSeparator 、separator | 路径 、路径分隔符 |
File(String parent,String child)、File(File parent,String child) 、File(String name) | 构造器、没有盘符以user.dir作为先对目录 |
getName()、getPath()、getAbsolutePath()、getParent() | 文件名、路径名 |
exists()、isFile()、isDirectory() | 判断状态 |
length() | 文件长度 |
createNewFile()、delete() | 创建新文件、删除文件 |
一、开篇
IO概述:
即输入输出流,流动的即是数据,以二进制的形式呈现,即字节流。人对字符更敏感,我们也可操作字符流。字符流底层还是字节流,自动搜索了我们的码表。
推荐组件:
CommonsIO
数据源:
就是存储数据的地方,例如网站、服务器、数据库。我们操作的是存储数据的文件。
其他:
Java对IO流进行了大量的封装,有很多对应的类和接口(进行了抽象)可直接使用。
核心的5个类和3个接口
序列化:
简单来说就是:对象存储在文件中的过程,而还原对象
又称之为反序列化。
IO流的方向:
输入流-程序-输出流
1、节点流:可以直接从数据源或目的地读写数据
2、包装流(处理流):对流进行封装,简化了操作,能提高性能。
包装流可以对其他流进行处理。
二、API使用规则以及如何构建File对象
1、File类代表的是一个抽象的表示形式。是将Java和文件建立起了一个联系。
2、查看API文档时,发现有的类没有构造器:
①静态工具类,例如 Math.不需要新建一个对象就可以使用
②静态方法去返回,例如Runtime
1、创建File对象的三种方法
代码
public class FileDemo1 {
public static void main(String[] args){
String path = "E:/Java/IO_Study01/src/ERT.jpg";
//构建File 对象
//方法1
File src = new File(path); //丢一个名称
System.out.println(src.length()); //打印图片大小(Kb)
//方法2
src = new File("E:/Java/IO_Study01/src","ERT.jpg"); //父子构建
src = new File("E:/Java/IO_Study01","/src/ERT.jpg"); //能够拼出来就OK
System.out.println(src.length());
//方法3
src = new File(new File("E:/Java/IO_Study01/src"),"ERT.jpg"); //父对象,子名称
System.out.println(src.length());
}
}
结果
2、相对路径与绝对路径
简单讲,区别在于有无盘符
代码
public class FileDemo2 {
public static void main(String[] args){
String path = "E:/Java/IO_Study01/src/ERT.jpg";
//绝对路径
File src = new File(path);
System.out.println(src.getAbsolutePath());
//相对路径:相对于工程路径
System.out.println(System.getProperty("user.dir")); //打印工程路径
src = new File("ERT.jpg");
System.out.println(src.getAbsolutePath());
}
}
注意:File可以构建一个文件,也可以构建一个不存在的路径
结果
3、名称分隔符用 separator
代码
public class PathDemo01 {
public static void main(String[] args){
String path = "E:\\Java\\IO_Study01\\src\\ERT.jpg";
System.out.println(File.separatorChar);
//1、建议用 / 不用转意,可以跨平台
String path1 = "E:/Java/IO_Study01/src/ERT.jpg";
//2、常量拼接,动态
String path2 = "E:"+File.separatorChar+"Java"+File.separatorChar
+"IO_Study01"+File.separatorChar+"src"+File.separatorChar+"ERT.jpg";
System.out.println(path);
System.out.println(path1);
System.out.println(path2);
}
}
结果
三、获取名称或路径
- getName() 名称
- getPath() 相对或绝对路径
- getAbsolutePath() 绝对路径
- getParent() 上一路径
代码
public class FileDemo3 {
public static void main(String[] args){
File src = new File("src/ERT.jpg");
//基本信息
System.out.println("名称:"+src.getName());
System.out.println("路径:"+src.getPath());
System.out.println("绝对路径:"+src.getAbsolutePath());
System.out.println("父路径:"+src.getParent());
System.out.println("父对象:"+src.getParentFile().getName());
}
}
结果
四、文件状态
1、判断是否存在:exists()
2、若存在:
- 文件判断:isFile()
- 文件夹/目录判断:isDirectory()
代码
public class FileDemo4 {
public static void main(String[] args){
File src = new File("src/ERT.jpg");
System.out.println("是否存在:"+src.exists());
System.out.println("是否是文件:"+src.isFile());
System.out.println("是否是文件夹:"+src.isDirectory());
System.out.println("------------");
src = new File("aaa/ERT.jpg");
System.out.println("是否存在:"+src.exists());
System.out.println("是否是文件:"+src.isFile());
System.out.println("是否是文件夹:"+src.isDirectory());
}
}
结果
五、其他信息
1、长度:length()
是字节数 (确保是文件)
代码
public class FileDemo5 {
public static void main(String[] args){
File src = new File("E:/Java/IO_Study01/src/ERT.jpg");
System.out.println("长度:"+src.length());
src = new File("E:/Java/IO_Study01");
System.out.println("长度:"+src.length());
src = new File("E:/Java");
System.out.println("长度:"+src.length());
}
}
注意:返回目录长度时,一般为0或者4096
结果
2、createNewFile() 和 delete() 的使用
代码
public class FileDemo6 {
public static void main(String[] args) throws Exception{
File src = new File("E:/Java/IO_Study01/src/test.txt");
//创建空文件
boolean flag = src.createNewFile();
System.out.println("是否创建成功:"+flag);
//删除已存在的文件
flag = src.delete();
System.out.println("是否删除成功:"+flag);
}
}
注意:操作跟系统打交道,重复名(跟关键字相同)不能创建成功,比如;con com3 …