Java IO流及文件操作
文件概念
文件: 文件是 保存数据的地方,比如我们日常生活中经常使用的word文档,txt文本文件,excel文件,图片…这些都是文件。
流介绍
在Java中所有的数据都是使用流 读写的,流 是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或者抽象。流 的本质是数据的传输,作用在数据源和程序之间建立通道,根据数据传输的特性将流 抽象为各种类,方便更直观的进行数据操作。
IO流体系结构
流的实现类
流的划分
按照方向划分
输入流: 输入就是将数据从各种输入设备(文件、键盘等)中读取到内存中。 输出流: 输出就是将数据写入到各种输出设备(比如:文件、显示器、磁盘等)。
按照数据传输单元划分
字节流: 以字节为单位传输数据的流 InputStream ,OutputStream 字符流: 以字符为单位传输数据的流 Reader 、Writer
按照功能划分
节点流: 用于直接操作目标设备的流,也叫低级流 , 例如:FileInputStream(D:\\text.txt) 过滤流: 对一个已存在流进行包装,以提供更强大和灵活的读写功能,也叫高级流 或者处理流 ,例如: BufferedInputStream(new FileInpuStream(D:\\text.txt))
IO流的超类
字节流顶层抽象类
InputStream :字节输入流超类 OutputStream :字节输出流超类
字节流 传输的单位是字节(8bit) InputStream 和OutputStream 都属于字节流的超类,他们是抽象类,不能直接使用,需要用他们相应的子类来实例化,在Java API中所有以这两个类为后缀的类均属于字节流, 例如:FileInputStream 、FileOutputStream 分别属于文件字节输入流和文件字节输出流。
字符流顶层抽象类
Reader :字符输入流超类 Writer :字符输出流超类
字符流 传输单位是字符(在UTF-8编码中一个字符占3个字节24bit) Reader 和Writer 都属于字节流的超类,也是抽象类,需要子类来实现实例化,JAva API中所有以这两个类为后缀名的类都属于字符流 例如:FileReader 、FileWriter 分别为文件字符输入流和文件字符输出流 。
File类介绍
File类 主要是对文件和目录的抽象表示 文件可以简单的理解为,在硬盘设备上保存数据的一种形式 文件一共可以分为两部分组成:属性 (文件大小,文件名、文件类型)和内容 (文件中存放内容)
File类 提供了对文件的的创建、删除、查找等操作,主要特点如下:
1、文件和目录在Java中抽象为File类 2、对于File而言,封装的并不是真正的文件,封装的仅仅是一个路径名,磁盘文件本身是可以存在的,也可以不存在 3、文件的内容不能用File读取,而是通过流来读取,File对象可以作为流的来源地和目的地
File类构造函数
1. 将路径字符串抽象为File实例,路径字符串可以是相对路径,也可以是绝对路径。
public File(String pathname)
2. 给定一个父路径File实例和子路径名来构建file实例
public File(File parent, String child)
3. 通过uri来创建一个file实例
public File(URI uri)
代码示例
public class FileTest01 {
public static void main(String[] args) {
String pathName = "e:\\hello.txt";
File file = new File(pathName);
String parentName = "e:";
String child = "test01.txt";
File file1 = new File(parentName);
File file2 = new File(file1, child);
File file3 = new File(parentName, child);
}
}
File类的基本操作
1. boolean createNewFile(); 当该名称的文件不存在时,创建空的文件并返回true,当文件存在时,返回false 代码示例
public class FileTest02 {
public static void main(String[] args) {
String pathname = "e:\\Java\\hello.txt";
File file = new File(pathname);
try {
boolean newFile = file.createNewFile();
System.out.println(newFile);
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果: 2. boolean delete() 立即删除文件或目录 代码示例
public class FileTest03 {
public static void main(String[] args) {
String pathname = "e:\\Java\\hello.txt";
File file = new File(pathname);
file.delete();
}
}
运行结果: 3. boolean exists(); 文件或者目录存在返回true,否则返回false
代码示例
public class FileTest04 {
public static void main(String[] args) {
String pathname = "e:\\Java\\hello.txt";
File file = new File(pathname);
try {
file.createNewFile();
if (file.exists()) {
System.out.println("文件存在");
} else {
System.out.println("文件不存在");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果: 4. boolean isDirectory() 返回true:当前是目录
当前文件夹 代码示例
public class FileTest05 {
public static void main(String[] args) {
String pathname = "e:\\Java\\a";
File file = new File(pathname);
if (file.isDirectory()) {
System.out.println("是目录");
}else {
System.out.println("不是目录");
}
}
}
运行结果: 5. boolean mkdir() true: 创建成功 false: 目录已经存在 代码示例
public class FileTest06 {
public static void main(String[] args) {
File file = new File("e:\\Java\\b");
if (file.mkdir()) {
System.out.println("目录创建成功");
}else {
System.out.println("目录已经存在");
}
}
}
运行结果: 6. boolean mkdirs() true: 创建多级目录 代码示例
public class FileTest08 {
public static void main(String[] args) {
File file = new File("e:\\Java\\b\\c\\d\\e");
file.mkdirs();
}
}
运行结果: 7. String getParent() 获取父目录 代码示例
public class FileTest09 {
public static void main(String[] args) {
File file = new File("e:\\hello.txt");
String parent = file.getParent();
System.out.println(parent);
}
}
运行结果: 8. String getAbsolutePath() 获取File对象的绝对路径名称 代码示例
public class FileTest10 {
public static void main(String[] args) {
String pathname = ".";
File file = new File(pathname);
String absolutePath = file.getAbsolutePath();
System.out.println(absolutePath);
}
}
运行结果: 9. String[] list() 返回目录中的文件和目录的名称的字符串数组 当前Java目录下的文件和目录: 🚀 返回目录下指定内容时,需要实现FilenameFilter接口进行过滤
public interface FilenameFilter {
boolean accept(File dir, String name);
}
代码示例
public class FileTest11 {
public static void main(String[] args) {
File file = new File("e:\\Java");
String[] list = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
boolean file1 = new File(dir, name).isFile();
return file1;
}
});
for (String s : list) {
System.out.print(s + " ");
}
}
}
运行结果:
10. File[] listFiles() 回目录中的文件和目录的名称的file实例数组 当前Java目录下的文件和目录: 代码示例
public class FileTest12 {
public static void main(String[] args) {
File file = new File("e:Java");
File[] files = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.startsWith("t");
}
});
for (File f : files) {
System.out.println(f.getName());
}
}
}
运行结果:
|