io流的使用

1.文件操作
1.1File类的作用
//java.io..File类是对存储在磁盘上的文件的信息的一个抽象表示。
//主要用于文件的创建、查找和删除。
1.2File类的使用

构造方法

public File(String pathname);//通过将给定的字符串路径名转换为抽象路径名来创建File实例
 String path = "D:\\io\\test.txt";
  File file = new File(path);

public File(String parent, String child);//通过给定的字符父级串路径和字符串子级路径来创建File实例
File file1 = new File("D:\\io","test.txt");

public File(File parent, String child);//通过父级抽象路径名和字符串子路径创建File实例。

 File file2 = new File("D:\\io");
File file3 = new File(file2, "test.txt");

常用方法

//绝对路径:带有盘符的路径称之为绝对路径
//相对路径:不带盘符的路径称之为相对路径,相对路径是相对当前工程来定位的。
public String getAbsolutePath();//获取文件的绝对路径 absolute 绝对的

public String getName();//获取文件的名字

public String getPath();//获取文件的路径

public File getParentFile();//获取父级文件

public long length();//获取文件的大小

public long lastModified();//获取文件最后修改时间

文件相关的判断

public boolean canRead();//是否可读

public boolean canWrite();//是否可写

public boolean exists();//是否存在

public boolean isDirectory();//是否是目录

public boolean isFile();//是否是一个正常的文件

public boolean isHidden();//是否隐藏

public boolean canExecute();//是否可执行

public boolean createNewFile() throws IOException;//创建新的文件

public boolean delete();//删除文件

public boolean mkdir();//创建目录,一级

public boolean mkdirs();//创建目录,多级

public boolean renameTo(File dest);//文件重命名,重命名后,原来的文件就不存在了

文件列表相关

public File[] listFiles();//列出文件夹下所有文件

public File[] listFiles(FileFilter filter);//列出文件夹下所有满足条件的文件
1.3递归删除文件夹

删除文件夹时必须保证文件夹为空,否则将删除失败

思考:如何删除一个文件夹?

public  static  void deleteFolder(File folder){
        if(folder.isDirectory()){//如果是文件夹就进去看,不是直接删除
            File[] files = folder.listFiles();//列出文件夹下的所有文件
            if (files!=null){
                for (File file : files) {
                    if (file.isDirectory()){
                        deleteFolder(file);
                    }else {
                        file.delete();
                    }
                }
            }
                folder.delete();

        }else {
            folder.delete();
        }
    }

2.i/0流
//io=input outout 输入输出,参照是内存
//将内容写入内存称为输入,将内存里的数据读出来称为输出。
//IO流分为字节流和字符流。字节流每次读取的基本单位是字节,一个字节8比特;
//字符流每次读取的单位是字符,一个字符串2个字节16比特。
2.1字节流
//字节流的顶层父类是 InputStream 和 OutpuStream,只要是字节流,就是这两个类的子类
//采用的字节流是文件输入输出字节流
FileInputStream ,  FileOutpuStream
//

OutputStream 常用方法

public abstract void write(int b) throws IOException; //写一个字节

public void write(byte b[]) throws IOException; //将给定的字节数组内容全部写入文件中

//将给定的字节数组中指定的偏移量和长度之间的内容写入文件中
public void write(byte b[], int off, int len) throws IOException;

public void flush() throws IOException;//强制将通道中数据全部写出

public void close() throws IOException;//关闭通道

InputStream 常用方法

public abstract int read() throws IOException; //读取一个字节

public int read(byte b[]) throws IOException; //读取多个字节存储至给定的字节数组中

//读取多个字节按照给定的偏移量及长度存储在给定的字节数组中
public int read(byte b[], int off, int len) throws IOException;

public void close() throws IOException;//关闭流,也就是关闭磁盘和内存之间的通道

public int available() throws IOException;//获取通道中数据的长度

字节流应用场景

Byte streams should only be used for the most primitive I/O.
字节流仅仅适用于读取原始数据(基本数据类型)
3. 字符流
//所有字符流类均来自Reader和Writer。 与字节流一样,也有专门用于文件I / O的字符流类:FileReader和FileWriter。

FileWriter 构造方法

public FileWriter(String fileName) throws IOException;//根据提供的文件路径构建一条文件输出通道

//根据提供的文件路径构建一条文件输出通道,并根据append的值决定是将内容追加到末尾还是直接覆盖
public FileWriter(String fileName, boolean append) throws IOException;

public FileWriter(File file) throws IOException;//根据提供的文件信息构建一条文件输出通道

//根据提供的文件信息构建一条文件输出通道,并根据append的值决定是将内容追加到末尾还是直接覆盖
public FileWriter(File file, boolean append) throws IOException;

FileReader 构造方法

public FileReader(String fileName) throws FileNotFoundException;//根据提供的文件路径构建一条文件输入通道

public FileReader(File file) throws FileNotFoundException;//根据提供的文件信息构建一条文件输入通道

综合练习

使用字符流实现磁盘文件拷贝功能

package com.qf.io._char;

import java.io.*;

public class Example3 {

    public static void main(String[] args) {
        String sourceFile = "F:\\AA\\io.txt";
        String destFile = "F:\\file\\a.txt";
        copyFile(sourceFile, destFile);
    }

    public static void copyFile(String sourceFile, String destFile){
        File file = new File(destFile);
        File parent = file.getParentFile();
        if(!parent.exists()) parent.mkdirs();
        try (Reader reader = new FileReader(sourceFile);
             Writer writer = new FileWriter(file)){
            char[] buffer = new char[4096];
            while (true){
                int len = reader.read(buffer);
                if(len == -1) break;
                writer.write(buffer, 0, len);
            }
            writer.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
字节流与字符流的区别?
1.单位不同:字节流的单位是字节,字符流的单位是字符,一个字符两个字节16个比特。
2.处理对象不同:字节流处理所有对象的类型,字符流一般只处理字符类型数据。
3.缓冲区不同:字节流在操作时本身不会用到缓冲区,是对文件本身进行处理。而字符流在操作时使用到缓冲区.
4.缓冲流
//到目前为止,我们看到的大多数示例都使用无缓冲的I / O。 这意味着每个读取或写入请求均由基础操作系统直接处理。 由于每个这样的请求通常会触发磁盘访问,网络活动或某些其他相对昂贵的操作,因此这可能会使程序的效率大大降低。

//为了减少这种开销,Java平台实现了缓冲的I / O流。 缓冲的输入流从称为缓冲区的存储区中读取数据; 仅当缓冲区为空时才调用本机输入API。 同样,缓冲的输出流将数据写入缓冲区,并且仅在缓冲区已满时才调用本机输出API。

//有四种用于包装非缓冲流的缓冲流类:BufferedInputStream和BufferedOutputStream创建缓冲的字节流,而BufferedReader和BufferedWriter创建缓冲的字符流。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值