Java中File和IO流

File和IO

读写文件

如前所述,一个流被定义为一个数据序列。输入流用于从源读取数据,输出流用于向目标写数据。

下图是一个描述输入流和输出流的类层次图。

img

字节流和字符流的区别:

文件 都是用二进制存储,就是0和1。所以我们可以使用字节流操作任何文文档 视频 图片(可以一半) 音频
如果是文档的话,因为有编码格式。不同编码格式对字节的操作不同,所以为了方便用字符流。字符流=字节流+编码格式、

FileInputStream

该流用于从文件读取数据,它的对象可以用关键字 new 来创建。

有多种构造方法可用来创建对象。

可以使用字符串类型的文件名来创建一个输入流对象来读取文件:

InputStream f = new FileInputStream("C:/java/hello");

也可以使用一个文件对象来创建一个输入流对象来读取文件。我们首先得使用 File() 方法来创建一个文件对象:

File f = new File("C:/java/hello"); 
InputStream in = new FileInputStream(f);

创建了InputStream对象,就可以使用下面的方法来读取流或者进行其他的流操作。

方法描述
close()关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常。
finalize()这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常。
read(int r)这个方法从 InputStream 对象读取指定字节的数据。返回为整数值。
返回下一字节数据,如果已经到结尾则返回-1。
read(byte[] r)这个方法从输入流读取r.length长度的字节。
返回读取的字节数。如果是文件结尾则返回-1。
available()返回下一次对此输入流调用的方法可以不
受阻塞地从此输入流读取的字节数。返回一个整数值。

FileOutputStream

该类用来创建一个文件并向文件中写数据。

如果该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。

有两个构造方法可以用来创建 FileOutputStream 对象。

使用字符串类型的文件名来创建一个输出流对象:

OutputStream f = new FileOutputStream("C:/java/hello",true); //拼接写入
OutputStream f = new FileOutputStream("C:/java/hello",false);//覆盖写入

也可以使用一个文件对象来创建一个输出流来写文件。我们首先得使用File()方法来创建一个文件对象:

File f = new File("C:/java/hello"); 
OutputStream fOut = new FileOutputStream(f);

创建OutputStream 对象完成后,就可以使用下面的方法来写入流或者进行其他的流操作。

序号方法及描述
1public void close() throws IOException{} 关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常。
2protected void finalize()throws IOException {} 这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常。
3public void write(int w)throws IOException{} 这个方法把指定的字节写到输出流中。
4public void write(byte[] w) 把指定数组中w.length长度的字节写到OutputStream中。

File类

Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。

File对象代表磁盘中实际存在的文件和目录。通过以下构造方法创建一个File对象。

通过给定的父抽象路径名和子路径名字符串创建一个新的File实例。

File(File parent, String child);

通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例。

File(String pathname) 

根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。

File(String parent, String child) 

通过将给定的 file: URI 转换成一个抽象路径名来创建一个新的 File 实例。

File(URI uri) 

创建File对象成功后,可以使用以下列表中的方法操作文件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

递归删除

//先判断是否是文件夹
if(file.isDirectory()){ 
    File[] files = file.listFiles();
for (File file2 : files) {
    deleteFile(file2);
	}
}
    file.delete();

复制文件夹

public static void copyDir(File file,File file1) throws IOException {
/文件夹不存在 创建文件夹
if (!file1.exists()) {
	file1.mkdirs();
}
//获取文件夹下文件
    File[] files = file.listFiles();
    for (File f : files) {
        //是文件夹 继续递归
        if (f.isDirectory()) {
			copyDir(f,new File(file1.getPath(),f.getName()));
        } else if (f.isFile()){
            //是文件,实现复制
			copy(f,new File(file1.getPath(),f.getName()));
        }
    }
}

复制文件

/复制文件
public static void copy(File resource,File target) throws IOException{
    FileInputStream fis = new FileInputStream(resource);
    BufferedInputStream bis = new BufferedInputStream(fis);
    FileOutputStream fos = new FileOutputStream(target);
    BufferedOutputStream bos = new BufferedOutputStream(fos);
    
	byte[] bytes = new byte[1024];
    int len = 0;
    while ((len = bis.read(bytes))!=-1){
        bos.write(bytes,off,len);
    }
	bos.close();
    bis.close();
	fos.close();
	fis.close();
}

在这里插入图片描述

Buffer流

​ 字符流有缓冲区,先讲数据存放在缓冲区,数据读完在统一序列化。字节流+缓冲区
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值