【java学习—十二】io流(1)


1. 主要内容

java.io.File 类的使用(计算机操作系统中的文件和文件夹)

IO原理的分类。
IOinput和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 个抽象基类派生的。

(抽象基类)字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter

由这四个类派生出来的子类名称都是以其父类名作为子类名后缀。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cpdr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值