详解Java中的File类和IO流

File类和IO流

1. File类
1.1 File类介绍和构造方法
File是SUN公司提供给程序员操作文件或者文件夹的一个类
只是针对于文件或者文件夹操作,不涉及文件的内容。

地址
	相对路径
		我在隔壁
		. 当前工作目录
		.. 当前工作目录的上级目录,或者说是父目录
	绝对路径
		河南省郑州市二七区**小区一号楼一单元101
Servlet 网络资源路径
	404 Source Not Found 天天404 刷新404 重启404 500

根目录:
	Windows操作系统根目录
		对应盘符 C D E F G
	Linux操作系统没有分区概念
		/ 根目录

构造方法:
	File(String pathName);
		根据指定的路径,创建对应文件或者文件夹的File类对象
	File(String parent, String childName);
		根据指定的父目录路径,和对应的子文件或者子文件夹名,创建对应的File类
		对象
	File(File parent, String childName);
		根据指定的父目录File类对象,和对应的子文件或者字文件夹名,创建对应的
		File类对象
1.2 创建文件和文件夹
创建文件:
boolean createNewFile();
使用File类对象调用,创建对应当前File类对象中保存文件地址的文件
创建成功返回true,失败返回false
失败原因:
	1. 文件路径不合法
	2. 对应操作的文件夹没有写入权限
        	rwxr-xr-x
	3. 对应当前文件已经存在
	4. 磁盘GG

创建文件夹:
boolean mkdir();
使用File类对象调用,创建对应File类对象保存文件夹地址的对应文件夹
创建成功返回true,失败返回false
失败原因同上

boolean mkdirs(); BT

重命名,移动文件或者文件夹:
boolean renameTo(File dest);
使用File类对象调用,把当前File类对象对应的文件,重命名,移动成目标文件dest
1.3 删除文件夹和文件夹
boolean delete();
使用File类对象调用,立即删除对应File类对象的文件或者文件夹,并且是从硬盘中抹去数据,而不是放入回收站!!!
【注意】
    如果删除的是非空文件夹,无法操作,有且只能删除空文件夹
    
void deleteOnExit();
当程序退出时删除对应的文件或者文件夹!!!
    一般用于日志文件删除,缓存文件删除......
1.4 获取文件或者文件夹属性
// 以下方法都是唬人的!!!
String getPath(); 获取路径
String getParent(); 获取父目录
String getName(); 或文件或者文件夹名字
    
String getAbsolutePath(); 获取当前文件或者文件夹对应的绝对路径【有用】
File getAbsoluteFile(); 获取当前文件或者文件夹对应的绝对路径File类对象【有用】
    
long length();
获取当前文件对应的字节数
long lastModified();
获取当前文件或者文件夹的最后一次修改时间,时间采用的方式是【时间戳】。时间戳是从19701100:00:00 到现在的秒数。
    2019121711:37:15
1.5 判断方法
boolean isfile(); 是否是普通文件
boolean isDirectory(); 是否是文件夹
boolean isHidden(); 是否是隐藏文件
boolean isAbsolute(); 是否创建使用的是绝对路径
boolean exists(); 文件或者文件夹是否存在
1.6 文件列表方法
static File[] listRoots();
	获取所有根盘符File类对象
String[] list();
	获取指定文件夹子文件和子文件夹名字String类型数组
File[] listFiles();
	获取指定文件夹子文件和子文件夹File类对象数组
1.7 FilenameFilter文件名过滤器
思想:
    数据需要过滤之后才可以做一些其他操作!!!
interface FilenameFilter
    boolean accept(File dir, String name);
	dir:当前操作对应的文件夹类对象
    name: 工作路径下的子文件夹名字和子文件名字
2. IO流
2.1 什么是IO
I 
	Input 输入
O
	Output 输出
输入输出的参照物:
	当前程序运行使用内存
	数据从内存流出,输出
	数据从外部流入到内存,输入

操作数据的单位:
	字节流
		可以用于任意类型文件操作
	字符流
		只能处理使用记事本打开的可视化文本文件操作。

InputStream 字节输入流
	FileInputStream 文件操作字节输入流
OutputStream 字节输出流
	FileOutputStream 文件操作字节输出流
Reader 字符输入流
	FileReader 文件操作字符数入流
Writer 字符输出流
	FileWriter 文件操作字符输出流
2.2 缓冲
数据缓冲之后会提高用户体验!!!

IO流中缓冲能够解决的问题,做突出的体验就是内存和硬盘之间的关系!!!

缓冲的使用可以极大的提供文件操作效率,减少内存和硬盘之间的读取次数。从而保护硬盘。

BufferedInputStream 缓冲字节输入流
BufferedOutputStream 缓冲字节输出流
BufferedReader 缓冲字符输入流
BufferedWriter 缓冲字符输出流

【注意】
	所有的缓冲流,只是一个缓冲,没有任何的读写文件的能力,这里都需要对应的字节流和字符流来提供对应的操作文件能力。
2.3 字节缓冲流操作
2.3.1 字节缓冲输入流读取文件
// 1. 确定读取哪一个文件
File file = new File("D:/aaa/2.txt");

// 2. 创建对应当前文件的FileInputStream
FileInputStream in = new FileInputStream(file);

// 3. 创建对应的当前文件的BufferedInputStream并且使用FileInputStream提供对应的读取文件的能力
BufferedInputStream bis = new BufferedInputStream(in);

// 4. 准备一个字节数组读取文件
int length = -1;
byte[] buf = new byte[1024 * 8];

/*
5. 读取文件
	read方法
		int read();
			读取一个字节数据返回!!!【没用】
		int read(byte[] buf);
			读取数据保存到字节缓冲数组中,返回值是对应当前读取到的字节个
			数,如果读取到文件末尾返回 EOF End Of File -1
		int read(byte[] buf, int offset, int len); 【没用】
*/
while ((length = bis.read(buf)) != -1) {
    System.out.println(new String(buf, 0, length));
}

// 6 关闭资源
bis.close;
2.3.2 字节缓冲输出流写入文件
// 1. 确认写入哪一个文件
File file = new File("D:/aaa/你猜这个文件有没有.txt");
// 2. 创建对应当前文件的FileOutputStream
FileOutputStream fileOutputStream = new FileOutputStream(file);
// 3. 创建字节输出缓冲流对象,并且使用FileOutputStream作为方法的参数
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
/*
4. 准备写入数据
    void write(int b); [没有]
    void write(byte[] buf, int off, int len);[最常用]
 */
bufferedOutputStream.write("Hello World!!!".getBytes());
bufferedOutputStream.close();
2.3.3 文件拷贝
package com.qfedu.c_io;

import java.io.*;

public class Demo3 {
    public static void main(String[] args) throws IOException {
        long start = System.currentTimeMillis();

        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\JavaEE\\视频\\123.mp4"));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:/aaa/456.mp4"));

        byte[] buf = new byte[1024 * 16];
        int length = -1;

        while ((length = bis.read(buf)) != -1) {
            bos.write(buf, 0, length);
        }

        bos.close();
        bis.close();

        long end = System.currentTimeMillis();

        System.out.println(end - start);
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值