文章目录
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) {
//File(String pathname)
//将路径字符串抽象为File实例,路径字符串可以是相对路径,也可以是绝对路径
String pathName = "e:\\hello.txt";
File file = new File(pathName);
//File(File parent, String child)
//给定一个父路径File实例和子路径名来构建File实例
String parentName = "e:";
String child = "test01.txt";
File file1 = new File(parentName);
File file2 = new File(file1, child);
//File(String parent, String child)
//给定一个父路径名和子路径名来构建File实例
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 {
//需要实现accept方法 根据当前的文件或者目录name作出处理
//满足为true时返回,否则过滤
//参数:dir表示父目录File实例 name:表示当前文件或者目录的名称
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");//返回以 t 开头的文件或目录
}
});
for (File f : files) {
System.out.println(f.getName());
}
}
}
运行结果:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/95513.html