在细讲JavaIO之前,先了解一下文件这个概念,这里IO可以简单分解成In-Out(输入-输出),这里输入输出的对象,简单理解一下就是各式各样的文件。内存中存放的数据,在电脑关机后就会消失。如果需要长久保存文件,就需要硬盘,磁盘,光盘,U盘等存储设备,在数据存储过程中,为了区分数据类别以及方便查询,就出现了“文件”的概念。
日常使用中按功能区分为文本文件、视频文件、音频文件、图像文件等等。但是在存储介质中,本质都是一个0、1组成的比特串。
为了方便文件的管理,又出现了树形目录机制,文件夹下可以存放文件,也可以嵌套文件夹,这就便利了用户对文件的管理与使用。
Java如何实现对文件和目录的操作?
Java作为一种面向对象语言,自然是通过对象,java将文件/目录的各种信息进行封装,如此就诞生了一个对象。通过对这个对象操作,就能获取文件的各种信息,以及进行创建、删除、修改等操作。
对文件/目录的操作:
import java.io.File;
import java.io.IOException;
public class Test01 {
public static void main(String[] args) throws IOException {
//将文件封装成一个File类的对象
File f1 = new File("C:\\work\\bluemsun\\IO\\TestDemo.txt");
//注意转义问题
File f11 = new File("C:\test.txt"); // Windows 是 \ 存在问题,转义字符 \t 制表符
File f12 = new File("C:\\test.txt"); // 因此要用 \\ 进行识别
//如果是跨平台使用则建议使用File.separator方法获取系统的分隔符
File f2 = new File("C:"+File.separator+"work\\bluemsun\\IO\\TestDemo.txt");
/**
* File.separator代表系统默认文件目录分隔符,即我们所说的“斜线”
* 但由于在Windows系统中分隔符为“\”
* 而在Linux系统中分隔符为“/”
*/
/**
* 1、separatorChar
* 代表系统的默认名称分隔符,它被表示为一个字符串(只包含一个字符)。
* 2、pathSeparator
* 此字符用于分隔以路径列表形式给定的文件序列中的文件名
* 在 UNIX和Linux系统上此字段为 ' : '
* 在Windows 系统上为 ' ; '
* 3、pathSeparatorChar
* 代表系统的路径分隔符,它被表示为一个字符串(只包含一个字符)
*/
//文件操作常用方法
System.out.println("文件是否可读:" + f1.canRead());
System.out.println("文件是否可写:" + f1.canWrite());
System.out.println("获取文件的名字:" + f1.getName());
System.out.println("获取该文件的上级目录:" + f1.getParent());
System.out.println("是否是一个目录:" + f1.isDirectory());
System.out.println("是否是一个文件:" + f1.isFile());
System.out.println("是否隐藏:" + f1.isHidden());
System.out.println("获取文件大小:" + f1.length() );
System.out.println("是否存在:" + f1.exists());
//文件路径
System.out.println("绝对路径:"+f1.getAbsolutePath());
System.out.println("相对路径:"+f1.getPath());
System.out.println("toString:"+f1.toString());
File f5 = new File("demo.txt");
if(!f5.exists()) {
f5.createNewFile();
}
System.out.println("-------------------------------");
// 绝对路径 指的就是 真实的一个精准的完整的路径
System.out.println("绝对路径:" + f5.getAbsolutePath());
// 相对路径 有一个参照物,相对于这个参照物的路径
// 在main方法中,相对位置指的就是:c:\work\bluemsun\IO\TestDemo.txt
System.out.println("相对路径:" + f5.getPath());
// toString的效果永远是 相对路径
System.out.println("toString:" + f5.toString());
System.out.println("-------------------------------");
File f6 = new File("\\a\\b\\c\\demo.txt");
System.out.println("绝对路径:" + f6.getAbsolutePath());
System.out.println("相对路径:" + f6.getPath());
}
}
import java.io.File;
import java.io.IOException;
public class Test02 {
public static void main(String[] args) throws IOException {
//将目录封装为一个File类的对象
File f1 = new File("C:\\work\\bluemsun\\IO\\demo");
//常用方法
System.out.println("文件是否可读:" + f1.canRead());
System.out.println("文件是否可写:" + f1.canWrite());
System.out.println("获取文件的名字:" + f1.getName());
System.out.println("获取该文件的上级目录:" + f1.getParent());
System.out.println("是否是一个目录:" + f1.isDirectory());
System.out.println("是否是一个文件:" + f1.isFile());
System.out.println("是否隐藏:" + f1.isHidden());
System.out.println("获取文件大小:" + f1.length() );
System.out.println("是否存在:" + f1.exists());
System.out.println("绝对路径:"+f1.getAbsolutePath());
System.out.println("相对路径:"+f1.getPath());
System.out.println("toString:"+f1.toString());
//目录相关方法
//创建多层目录
/**
* 删除目录时只删除一次,并且要求本层目录为空,如果有内容子不会被删除
*/
File f2 = new File("C:\\work\\bluemsun\\IO\\demo\\a\\b\\c");
f2.delete();
String[] fileList = f1.list();
/**
* 获取目录下文件名或文件夹名
*/
for (String s: fileList){
System.out.println(s);
}
System.out.println("--------------------------------------");
File[] files = f1.listFiles();
/**
* 将文件或者文件夹也封装到File对象里
*/
for (File file: files){
System.out.println(file.getName());
System.out.println(file.getAbsolutePath());
}
}
}
1. File类主要是JAVA为文件这块的操作(如删除、新增等)而设计的相关类
2. File类的包名是java.io,其实现了Serializable, Comparable两大接口以便于其对象可序列化和比较
下面我们正式引入:IO流
I/O : Input/Output的缩写,用于处理设备之间的数据的传输。
形象理解:IO流 当做一根 “管”:
处理流,也叫包装流,是在“连接”已经存在的流(节点流或者处理流)之上,为程序提供强大的读写功能,更加灵活。如BufferedReader,BufferedWriter。