1.前言
IO流的实际使用场景是很多的,例如文件的上传下载,传输,设计模式…都会涉及到IO流。
在使用IO流的时候我们要明确
1)是操作的数据是数据源还是目的(也就是要读还是要写)
2)操作的设备上的是字节还是文本
3)考虑是否需要额外的功能(转换流,高效流等)
2.File类
IO流也就是输入输出流,从文件开始到文件结束,都离不开文件,所以我们先从File类开始整理(文件)
java.io.File 类是专门针对文件进行操作的类,不过file类只能对文件本身进行操作,不能对文件内容做修改,主要应用在对文件和目录的查找,创建与删除功能中
java.io.File类是文件与目录抽象路径名的表示
总结:
file与流无关,不能对文件进行读入和写出,
就是操作文件(D:\文件目录1\文件.txt)与目录(D:\文件目录)的类
2.1构造方法
在java中万物皆对象,File类也不例外,说到对象那么不的不了解的就是对象的构造方法
记录三种最常用的File构造方法
1)。public File(String pathname) :通过将给定的路径名 字符串转化为抽象路径名来创建新的File实例
2)public File(String parent,String child):通过父路径名 字符串与子路径名 字符串来创建新的File实例
3)public File(File parent,String child): 通过通过父抽象路径名与子路径名 字符串创建新的File实例
接下来我们来看一段代码:
//1.一个File对象代表一个硬盘中实际存在的文件或是目录
//2.而File类的构造方法不会去检验文件或是目录是否真实存在,所以,该路径下是否存在目录或是文件,都不会影响File对象的创建
//文件路径名
String pathName="D:\\abc.txt";
File file=new File(pathName);
//文件路径名
Stirng PathName2="D:\\1\\def.txt";
File file=new File(pathName2);
//通过父路径与子路径名字符串来创建File实例
String parent="D:\\bbb";
String child="aaa.txt";
File file=new File( parent,child);//------相当于D:\\bbb\\aaa.txt
//通过父级File对象与子路径名 字符串创建新的File实例
File parent1=new File("D:\\bbb");
String child2="aaa.txt";
File file=new File(parent1,chaild2);//----相当与D:\\bbb\\aaa.txt
总结:File类的注意点:
1):一个File对象代表一个实际存在与硬盘中的文件或是目录
2):File类的构造方法不会检测文件或是目录是否存在,也就是说该路径下是否存在文件或是目录都不会影响File对象的创建
2.2File类的常用方法
2.2.1 File类获取某些功能的方法
1)public String getAbsolutePath():获取该File对象的绝对路径名字符串
2)public String getName();获取该File对象表示的文件或是路径的名字
3)public Long length();返回此File表示的文件的长度
以上方法测试,测试代码如下:
//getAbsolutePath();获取文件的绝对路径名 字符串
//getName();获取File代表的文件或目录的名字
//length();获取文件或是目录的长度
public class TestIoMethod{
public static void main(String[] agr){
//模拟创建一个File实例(你们以自己的磁盘文件为实际)
File file=new file("D:\\bbb\\aaa.txt");
System.out.println("文件的绝对路径名字符串:"+file.getAbsolutePath());
System.out.println("File对象代表的文件的名字"+file.getName());
System.out.println("File对象代表的文件的长度"+file.length());
//控制台打印结果如下:
/*文件的绝对路径名字符串:D:\bbb\aaa.txt
*File对象代表的文件的名字:aaa.txt
*File对象代表的文件的长度:0
*/
}
}
2.2.2 绝对路径和相对路径
1)绝对路径:是指以盘符开头的完整路径(D:\aaa\bbb.txt)
2) 相对路径:一个简化的路径,不已盘符开头(\bbb.txt)
注意点:
1)路径名不区分大小写,
2)路径中的文件名称分隔符windows使用的是反斜杠,反斜杠是转义字符,两个反斜杠就代表一个普通的反斜杠
2.2.3 判断某些功能的方法
1)public boolean exists();判断此File对象标识的文件或目录是否真实存在,存在返回true,不存在返回false
2)public boolean isDirectory();判断此File表示的是否为目录
3)public boolean isFile();判断此File表示的是否为文件
测试代码如下
public class TestIoMethod{
/** 这个类用来测试File中的常用的判断方法 */
public static viod main(String[] arg){
//创建一个盘符中实际存在的文件或是目录的实例对象
File file=new File("D:aaa.txt");
//测试以上的判断方法
System.out.println("该File对象表示的文件或是目录是否存在"+file.exists());
System.ourt.println("该File对象表示的是目录"+file.isDirectory());
System.out.println("该File对象表示的是文件"+file.isFile());
//控制台的输出结果为:
//true
//false
//true
}
}
2.2.4 创建文件与删除文件的功能
1)public boolean createNewFile();文件不存在,创建一个新文件并返回true,如果文件存在直接返回false
2)public boolean delete();删除由此File表示的文件或目录
3)public boolean mkdirs();创建由此File表示的目录,包括任何必需但不存在的父目录。
注意:还有一个mkdir()方法但是只能创建一级目录。所以在开发中以重会使用mkdirs()方法,可以创建多级目录(\s\d\s),
演示代码如下:
public class TestCD{
/** 这个类用来测试文件或目录File的创建与删除 */
public static void main(String[] arg){
//文件的创建与删除
File file =new File("D:\\aaa.txt");
System.out.println("文件是否存在"+f.exists());
System.out.println("创建文件"+f.createNewFile());
System.out.println("创建文件"+f.createNewFile());
System.out.println("文件是否存在"+f.exists());
System.out.println("删除文件"+f.delete());
//控制台结果演示
//false;
//true;
//false;
//true
//true;
//目录的创建与删除
File f=new File("D:\\bbb");
File f1=new File("D:\\bbb\\aaa");
System.out.println("目录是否存在"+f.exists());
System.out.println("创建目录"+f.mkdir());
System.out.println("创建多级目录"+f1.mkdirs());
System.ouot.println("删除目录"+f.delete());
//控制台演示结果
//false;
//true;
//true;
//true;
}
}
总结:
1)createNewFile()方法只能用来创建文件,不能创建目录
2)delete()删除方法能删文件,也能删除目录。但是能删除的目录必须是没有文件存在的目录
3)mkdir()只能创建一级目录 而 mkdirs()可以创建多级目录
2.2.5 目录的遍历
1)public String[] list();返回一个字符串数组,表示该File对象表示的目录中的所有子文件或是目录的名字
2)public File[] listFiles();返回一个File对象的数组,表示当前目录下的文件以及文件夹(目录)的对象,只要拿到了文件对象,就可以进行更多的操作,
测试代码如下
public class TestIo{
/** 这个类用来测试目录的遍历 */
public static void main(String[] age){
//创建一个File对象(磁盘实际存在的文件夹)
File f=new File("D:\\aaa");
//第一种遍历.返回当前目录下所有的子文件或是文件夹
String[] names=f.list();
for(String name:names){
System.out.println(name);//打印的是文件或目录的名字
}
//第二种遍历,返回当前目录下的子文件或是目录的对象
File[] f1=f.listFiles();
for(File f2:f1){
Systrm.out.println(f2);//返回当前的目录下的文件或是目录的对象,直接打印显示的是文件或目录的全路径
}
}
}
总结:
1)在使用这种方法的时候。必须保证所指定的目录真实存在,
2)指定的必须是目录,不然会引发空指针异常(NullPointerException)
2.2.6 递归遍历文件夹中所有的文件
演示代码如下:
public class TestRecursion{
/** 这个类用来测试递归遍历文件夹所有的文件 */
public static void main(String[] arg){
//获取文件夹对象,保证文件夹真实存在
File file=new File("D:\\aaa");
Recursion(file);
}
public static void Recursion(File file){
//如果传入的不是目录就直接退出
if(!file.isDirectory){
return;
}
//保证传入的是目录。获取对象
File[] files= file.listFiles();
//遍历
for(File f:files){
if(f.isDirectory){
//递归
Recursion(f);
}else{
//打印文件名字
System.out.println(f.getName());
}
}
}
}
好了童鞋们!关于File类的知识点我们就先总结到这里,关于IO流的正式认知我们会在这一篇文章中开整!再见!