文章目录
- 1. 主要内容
- 2. File类
- 3. 练习题
- 4. Java IO原理
1. 主要内容
java.io.File 类的使用(计算机操作系统中的文件和文件夹)
IO原理及流的分类。
IO
即input和output
。
流的解释:
比如:通过程序把图片放到某一个文件夹的过程。先把图片转化为一个数据集合(例如二进制),把这些数据一点一点传到文件夹,这个传递过程就很类似于水的流动,我们就可以称这个整体的数据集合是一个数据流。
流分为文件流和缓冲流
文件流:数据流的读写都是基于文件的操作
FileInputStream
/ FileOutputStream
/ FileReader
/ FileWriter
缓冲流:数据流的读写都是基于内存的操作
BufferedInputStream
/ BufferedOutputStream
/ BufferedReader
/ BufferedWriter
转换流:
InputStreamReader
/ OutputStreamWriter
标准输入流 / 标准输出流
打印流(了解)
PrintStream
/ PrintWriter
数据流(了解)
DataInputStream
/ DataOutputStream
对象流 ---- 涉及序列化、反序列化:把一个对象转化为一个数据流进行读写
ObjectInputStream
/ ObjectOutputStream
随机存取文件流:例如一个txt文件,其中有100行数据,可以直接读取第50行数据,也可以在第89行插入数据(具体哪一行,由开发人员决定),这个才是随机的概念。
RandomAccessFile
2. File类
java.io.File 类:文件和目录路径名的抽象表示形式,与平台无关
File
能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入 / 输出流。
File 对象可以作为参数传递给流的构造函数
File 类的常见构造方法:
①public File(String pathname)
以 pathname
为路径创建 File 对象,可以是绝对路径或者相对路径,
如果 pathname
是相对路径,则默认的当前路径在系统属性 user.dir 中存储。
②public File(String parent,String child)
以 parent
为父路径, child
为子路径创建 File 对象。
File
的静态属性 String separator
存储了当前系统的路径分隔符。在 UNIX 中,此字段为‘ /’ ,在 Windows 中,为‘ \\’
举例:
package day12;
import java.io.File;
public class Test {
public static void main(String[] args) {
File f = new File("D:\\test\\abc\\tt.txt");//这个时候对象f就是tt.txt文件
File f1 = new File("D:\\test\\abc","\\tt.txt");//这个f1也是tt.txt文件,这种使用相对较少
File f2 = new File("D:/test/abc/tt.txt");
File f3 = new File("D:" + File.separator + "test/abc/tt.txt");
//注意:\在文件中是路径的分隔符,但是在java编程中一个\的意思是转义符,在java中\\或者/才是文件的分隔符
//也可以用File.separator作为文件的分隔符
}
}
小节:
File 类代表与平台无关的文件和目录。
File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身(类似于,你可以把一个txt文件放在各种地方,但是不能在txt文件中进行写操作)。如果需要访问文件内容本身,则需要使用输入 / 输出流。
举例:
package day12;
import java.io.File;
public class Test {
public static void main(String[] args) {
File f = new File("D:\\test\\abc\\tt.txt");//这个时候对象f就是tt.txt文件
File f1 = new File("D:\\test\\abc","\\tt.txt");//这个f1也是tt.txt文件,这种使用相对较少
File f2 = new File("D:/test/abc/tt.txt");
File f3 = new File("D:" + File.separator + "test/abc/tt.txt");
//注意:\在文件中是路径的分隔符,但是在java编程中一个\的意思是转义符,在java中\\或者/才是文件的分隔符
//也可以用File.separator作为文件的分隔符
File f4 = new File("D:/test/abc");//这是个目录
//getName():获取文件名和目录名
System.out.println(f.getName());//文件名
System.out.println(f4.getName());//目录名
System.out.println("-------------------------------------------");
//getPath():获取路径
File f5 = new File("src/day12/Test.java");//使用相对路径来创建File对象
System.out.println(f5.getPath());//获取文件或者文件夹的路径,就是new File时候写的路径
System.out.println(f5.getAbsolutePath());//获取文件或者文件夹的绝对路径
System.out.println("-------------------------------------------");
//getAbsoluteFile()
System.out.println(f5);
System.out.println(f5.getAbsoluteFile());//返回一个用当前的文件的绝对路径构建的File对象
System.out.println("-------------------------------------------");
//getParent()
System.out.println(f5.getParent());//返回当前文件或文件夹的父级路径
System.out.println("-------------------------------------------");
//renameTo():文件改名
//f.renameTo(new File("D:/test/abc/tt1.txt"));//给文件或文件夹重命名
}
}
3. 练习题
采用递归遍历文件夹中所有子文件夹以及文件。
package day12;
import java.io.File;
public class Test {
public static void main(String[] args) {
File f = new File("D:/APP");
new Test().test(f);
}
/**
* 递归遍历文件
* @param file
*/
public void test(File file) {
if(file.isFile()) {
System.out.println(file.getAbsolutePath() + "是文件");
}else {
System.out.println(file.getAbsolutePath() + "是文件夹");
//如果是文件夹,这个文件夹里就可能有子文件夹或者文件
File[] fs = file.listFiles();//获取当前文件夹下的子文件夹或者文件的File对象
if(fs != null && fs.length > 0) {
for(File ff : fs) {
test(ff);//递归
}
}
}
}
}
4. Java IO原理
IO 流用来处理设备之间的数据传输。
Java 程序中,对于数据的输入 / 输出操作以”流 (stream)” 的方式进行。
java.io 包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。
输入 input :读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。
输出 output :将程序(内存)数据输出到磁盘、光盘等存储设备中
流的分类:
- 按操作数据单位不同分为:字节流 (8 bit) ,字符流 (16 bit)
- 按数据流的流向不同分为:输入流,输出流
- 按流的角色的不同分为:节点流、处理流
Java 的 IO 流共涉及 40 多个类,实际上非常规则,都是从如下 4 个抽象基类派生的。
(抽象基类) | 字节流 | 字符流 |
---|---|---|
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
由这四个类派生出来的子类名称都是以其父类名作为子类名后缀。