File和IO流

File和IO流

一、File

java.io.File 类是专门对文件进行操作的类。(只能对文件本身进行操作,不能对文件内容操作)

  • File类是“文件和目录路径名的抽象表示”。而不是指文件的内容。
  • File类定义了一些与平台无关的方法操作,如:创建、删除文件和重命名等。
  • Java中目录被看成是一个特殊的文件。List()方法可以返回目录中所有的子目录和文件。
  • 在linux下路径分隔符为(/),而在windos中则是为(\),在java中可以正确的处理不同系统中的分隔符。

1.1File类常用构造方法和属性

1.1.1常用构造方法
1public File(String pathname)
//以pathname为路径创建File对象,如果pathname是相对路径,(对java工程来说,就是该工程的根目录。)
2File(String parent, String child)  
1.1.2 属性
1public static finalString separator 存储了当前系统的名称分隔符

//在 LINUX和Mac系统上,此字段的值为 '/';在 Windows 系统上,它为 '\'.为了程序的跨平台特性,文件的路径应该用这个属性值来代表。

2public static finalchar pathSeparator 存储了当前系统默认路径分割符号

//Windows系统是;  即path环境变量中,不同的路径的分割符号。LINUX系统是:
  • 系统分隔符、以windows为例 为 ‘;’

请添加图片描述

1.2 File类的常用方法

1.2.1 获取文件的属性
File file = new File("./a.txt");
file.separator;  //分隔符 windows返回\ linux返回/
System.out.println("判断是否是一个文件(file.isFile()):"+file.isFile());
System.out.println("判断是否是隐藏文件或目录(file.isHidden()):"+file.isHidden());
System.out.println("最后修改时间(file.lastModified()):"+file.lastModified());
System.out.println("文件长度(以字节为单位):"+file.length());
System.out.println("获取文件名字:"+file.getName());
System.out.println("获取文件路径:"+file.getPath());
1.2.2 对于文件的操作
boolean bool = file.mkdir();//可以创建文件对象的上一级目录
boolean morebool = file.mkdirs();//判断路径是否存在,如果不存在,就创建对应目录(多级)
//删除:如果file为文件直接删除 ,如果是文件夹,只有空文件夹才能被删除,否则就要遍历文件里的内容一一删除
boolean isDelete = file.delete();

File [] list = file.listFiles();//得到目录下所有的直接子目录和文件()

在获取文件和目录过程中,还可以对文件和目录进行筛选(或者过滤): 借助FileFilter 函数式接口,重写accept()方法,类似stream流的 filter操作

File file = new File("./myfile");
		// 判断是否是一个目录
		if (file.isDirectory()) {
   
			File[] all = file.listFiles(new FileFilter() {
   
				@Override
				public boolean accept(File myfile) {
   
					// 判断是否是一个目录,是就通过
					if (myfile.isDirectory()) {
   
						return true;
					}
					// 判断文件是否是以.txt结尾的,是就通过
					if (myfile.getName().endsWith(".txt")) {
   
						return true;
					}
					return false;
				}
			});
			for (int i = 0; i < all.length; i++) {
   
				System.out.println(all[i].getPath());
			}

二、IO流

2.1什么是IO流

IO指的是Input/Output,IO流:输入输出流。 统称为数据流(IO Stream)

​ 在Java程序中,对于数据的输入 / 输出操作以流的方式进行;流是从起源到接收的有序数据。JDK提供了各种各样的流类,用以获取不同种类的数据;

请添加图片描述

2.2 IO流的分类

  • 按流向分:

    请添加图片描述

    • 输入流:程序可以从中读取数据的流
    • 输出流:程序能向其中写入数据的流
  • 按数据传输单位分:

    • 字节流:以字节为单位传输数据的流
    • 字符流:以字符为单位传输数据的流
  • 按功能分:

    • 节点流:用于直接操作目标设备的流
    • 处理流:是对一个已存在的流的连接和封装,通过对数据的处理为程序提供更强大、灵活的读写功能。

2.3 IO流的基类

分类 字节输出流 字节输入流 字符输出流 字符输入流
抽象基类 OutputStream InputStream Writer Reader
访问文件 FileOutputStream FileInputStream FileWriter FileReader
访问数组 ByteArrayOutputStream ByteArrayInputStream CharArrayWriter CharArrayReader
访问管道 PipedOutputStream PipedInputStream PipedWriter PipedReader
访问字符串 StringWriter StringReader
缓冲流 BufferedOutputStream BufferedInputStream BufferedWriter BufferedReader
转换流 OutputStreamWriter InputStreamReader
对象流 ObjectOutputStream ObjectInputStream
抽象基类 FilterOutputStream FilterInputStream FilterWriter FilterReader
打印流 PrintStream PrintWriter
推回输入流 PushbackInputStream PushbackReader
特殊流 DataOutputStream DataInputStream
2.3.1 InputStream字节输入流

​ 继承自InputStream的流都是用于向程序中输入数据的,且数据的单位为字节(8位),下图中深色为节点流,浅色为处理流

请添加图片描述

InputStream基本方法:

public abstract int read() throwsIOException

​ 从输入流中读取数据的下一个字节, 返回读到的字节值.若遇到流的末尾,返回-1

public int read(byte[] b) throwsIOException

​ 从输入流中读取 b.length 个字节的数据并存储到缓冲区数组b中.返回的是实际读到的字节总数

public int read(byte[] b, int off, int len)throws IOException

​ 读取 len 个字节的数据,并从数组b的off位置开始写入到这个数组中

public void close() throws IOException

​ 关闭此输入流并释放与此流关联的所有系统资源

public int available() throws IOException

​ 返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数

public skip(long n) throws IOException

​ 跳过和丢弃此输入流中数据的 n 个字节,返回实现路过的字节数。

2.3.2 OutputStream字节输出流

​ 继承自OutputStream的流是程序用于向外输出数据的,且数据的单位为字节(8位),下图中深色为节点流,浅色为处理流

请添加图片描述

OutputStream主要方法:

public abstract void write(int b) throwsIOException

​ 将指定的字节写入此输出流

public void write(byte[] b) throwsIOException

​ 将 b.length 个字节从指定的 byte 数组写入此输出流

public void write(byte[] b, int off, intlen) throws IOException

​ 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流

public void flush() throws IOException

​ 刷新此输出流并强制写出所有缓冲的输出字节

pulbic void close() throws IOException

​ 关闭此输出流并释放与此流有关的所有系统资源

2.3.3 Reader字符输入流

​ 继承自Reader的流都是用于向程序中输入数据的,且数据的单位为字符(16位),下图中深色为节点流,浅色为处理流

请添加图片描述

public int read() throws IOException

​ 读取单个字符,返回作为整数读取的字符,如果已到达流的末尾返回-1

public int read(char[] cbuf) throwsIOException

​ 将字符读入数组,返回读取的字符数

public abstract int read(char[] cbuf,int off, int len) throws IOException

​ 读取 len 个字符的数据,并从数组cbuf的off位置开始写入到这个数组中

public abstract void close() throwsIOException

​ 关闭该流并释放与之关联的所有资源

public long skip(long n) throwsIOException

​ 跳过n个字符。

2.3.4 Writer字符输出流

​ 继承Writer的流都是向程序中输出数据,且数据的单位为字符(16 bit);下图中深色为节点流,浅色为处理流

请添加图片描述

public void write(int c) throwsIOException

​ 写入单个字符

public void write(char[] cbuf) throws IOException

​ 写入字符数组

public abstract voidwrite(char[] cbuf, int off, int len) throws IOException

​ 写入字符数组的某一部分

public void write(String str) throwsIOException

​ 写入字符串

public void write(String str,int off, int len) throws IOException

​ 写字符串的某一部分

public abstract void close() throwsIOException

​ 关闭此流,但要先刷新它

public abstract void flush() throwsIOException

​ 刷新该流的缓冲,将缓冲的数据全写到目的地

2.4 节点流

节点流为可以从一个特定的数据源(节点)读写数据(如:文件,内存)

类型 字符流 字节流
File(文件) FileReader;FileWriter FileInputStream;FileOutputStream
Memory Array CharArrayReader;CharArrayWriter ByteArrayInputStream;ByteArrayOutputStream
Memory String StringReader;StringWriter
Pipe PipedReader;PipedWriter PipedInputStream;PipedOutPutStream
2.4.1 FileInputStream

FileInputStream 类创建

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值