java学习—十二】io流(1)"/>
【java学习—十二】io流(1)
文章目录
- 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 |
由这四个类派生出来的子类名称都是以其父类名作为子类名后缀。
更多推荐
【java学习—十二】io流(1)
发布评论