一、File类
在Java中,可以将文件封装为File类的对象,对这个对象进行操作。
1.常用方法
1)对文件的操作:判断可读,可写,存在,输出文件名,文件大小,文件路径,比较两个文件等
2)对目录的操作:创建目录,遍历目录,删除目录等
package com.rzd.no04file;
import java.io.File;
public class Demo01 {
public static void main(String[] args) /*throws IOException*/ {
//先保证在对应的路径存在文件,这里在D盘新建一个文件test.txt,内容为"abc你好"。
//创建一个File类的对象new File(),将文件路径放在()中
//由于不同系统中的盘符的分隔符不同,所以可以直接用File.separator获取当前环境,盘符的分隔符
File f1 = new File("d:"+ File.separator+"javatest"+File.separator+"test.txt");
/*//在确定盘符的情况下也可以直接写,但是要注意转义
File f11 = new File("d:\\javatest\\test.txt");
File f12 = new File("d:/javatest/test.txt");*/
//常用方法
//1.文件是否可读,可写
System.out.println(f1.canRead());//true
System.out.println(f1.canWrite());//true
//2.输出文件名称,文件大小,文件路径
System.out.println(f1.getName());//test.txt
System.out.println(f1.length());//9,右键查看文件属性,显示9字节
System.out.println(f1.getPath());//绝对路径:d:\javatest\test.txt
System.out.println(f1.getAbsolutePath());//相对路径:d:\javatest\test.txt
System.out.println(f1/*.toString()*/);//toString()的效果是相对路径
System.out.println(f1.getParent());//输出上级目录:d:\
//3.判断文件是否存在,判断是否是一个目录or文件,判断文件是否被隐藏
System.out.println(f1.exists());//true
System.out.println(f1.isDirectory());//false
System.out.println(f1.isFile());//true
System.out.println(f1.isHidden());//false
//4.比较两个文件
File f2 = new File("d:" + File.separator + "javatest" + File.separator + "test.txt");
System.out.println(f1==f2);//false比较地址,虽然是一个文件,但是f2是新创建的对象,地址不会相同
System.out.println(f1.equals(f2));//true比较两个对象对应的文件的路径
/*//如果文件不存在,则创建这个文件,如果存在则删除这个文件
if (f1.exists()){
f1.delete();
}else {
f1.createNewFile();//抛出异常
}*/
//5.创建目录
/*//创建单层目录
File f3 = new File("D:\\javatest\\a");
f3.mkdir();*/
//创建多层目录,如果目录是多层的,使用mkdir()方法无创建目录效果
File f3 = new File("D:\\javatest\\a\\b\\c");
f3.mkdirs();
//6.遍历目录,先在目录下创建一些文件D:\javatest\a\aa.txt D:\javatest\a\b\bb.txt D:\javatest\a\b\c\cc.txt
//1)list()方法可以遍历目录,返回的是String数组,于是创建一个String数组对象来接收
String[] list = f3.list();
for (String s:list){//for循环遍历list
System.out.println(s); //cc.txt,可以看到只能遍历出c目录里的文件。
}
//2)listFiles()方法也可以遍历目录,返回的是File类型的数组
File[] files = f3.listFiles();
for (File file:files){//对files对象进行遍历
//对于files里面的每个对象,都是一个File类的对象,那么就可以调用File类的方法
System.out.println(file.getName()+"\t"+file.getPath());
}
//7.删除目录
//只有当目录为空的时候才能删除成功,且只会删除c目录
f3.delete();
}
}
二、I/O流
1.定义
I/O:inpute/outpute 输入/输出流
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
可以形象的将流当做一根“管”,这根“管”连接着数据源和Java程序,而数据在“管”中传输
2.I/O流的分类
1)按数据流向分:输入流和输出流
2)按处理的数据类型分:字节流和字符流
3)按功能分:节点流(一根“管”处理流)和处理流(“管”套着“管”,也就是构造器嵌套)
3.流的表格
字节流 | 字符流 | ||||
输入流 | 输出流 | 输入流 | 输出流 | ||
抽象基类 | InputStream | OutputStream | Reader | Writer | |
节点流 | 访问文件 | FileInputStream | FileOutpuStream | FileReader | FileWriter |
访问数组 | ByteArrayInputStream | ByteArrayOutputStream | CharArrayReader | CharArrayWriter | |
访问管道 | PipedInputStream | PipedOutputStream | PipedReader | PipedWriter | |
访问字符串 | StringReader | StringWriter | |||
处理流 | 缓冲流 | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
转换流 | InputStreamReader | OutputStreamWriter | |||
对象流 | ObjectInputStream | ObjectOutputStream | |||
FilterInputStream | FilterOutputStream | FilterReader | FilterWriter | ||
数据流 | DataInputStream | DataOutputStream | |||
打印流 | PrintStream | PrintWriter | |||
推回输入流 | PushbackInputStream | PushbackReader |