文件过滤器和输入输出流初识

文件过滤器 :是个接口

编写自定义的类来实现过滤器的接口

class MyFileFiler implemrnts FileFilter{
    public boolean accept(File pathname){
        return
    }
}

编写自定义规则来过滤文件,过滤文件时就看这个方法的返回值 ,返回true就保留 ,false就删除


例 ;删除文件夹中的所有txt文件。使用file.delete()方法,该方法不能删除包含子文件或字文件夹的文件,所以要遍历文件夹自定义规则


编写过滤器
class MyFileByTxt implements FilenameFilter{
    public boolean accept(File pathname){
    if(pathname.isDirectory){
       return true; 
    }
    return pathname.getName().endWith("txt")       
        }
    }
}

遍历文件夹
public static void sortFile( File file){
  File[] fileslist=file.listfiles(newMyFileByTxt());
  for(File file2 : list){
      if(file.isDirextory){
         sortFile(file); 
      }else{
          System.out.println(file2.getName())
      }
  }
}



字节流
从程序到文件叫输出流 --output

OutPutStream 是抽象类 ,是所有输出流的抽象类,特点:一次就写入一个字节


写文件的流程
1.绑定要写入的文件
2.用write写入
3.关闭资源

File file = new File("/Users/lanou/Desktop/test/wl.txt");
注意:如果该路径下没有文件,系统会帮你创建一个
如果有这个文件会覆盖
FileOutputStream fop = new FileOutputStream(file);

写入方法
1.按ascii来写入数据
fop.write(48)
2.根据字符数组来写入
Byte[] b = {65,66,67,68};
fop.write(b):
3.按字符数组 和起始坐标和长度来写入数据
fog.write(b,2,2);
4.简单写法
fog.write("nihao".getBytes());


关闭资源
fog.close();

文件的续写
 File file = new File("/Users/lanou/Desktop/test/long.txt");
         FileOutputStream outputStream = new FileOutputStream(file, true);
         outputStream.write("hello".getBytes());
         outputStream.close();

true就表示可以续写,重复执行可以写入多个hello


异常处理
io发生了异常 都需要停止程序 修改代码 抛出运行时异常

public class fuxi {
    public static void main(String[] args) {
        File file = new File("/Users/lanou/Desktop/test/long.txt");
        FileOutputStream outputStream = null;
        try {
            outputStream = new FileOutputStream(file);
            outputStream.write("hello".getBytes());
        } catch (FileNotFoundException e) {
            throw new RuntimeException("文件不存在 ");
        } catch (IOException e) {
            throw new RuntimeException("文件编写失败");
        }
        try {
            if(outputStream!=null) {
                outputStream.close();
            }
        } catch (IOException e) {
            throw new RuntimeException("关闭失败");
        }
    }
}


字节输入流 ---input 相当于读文件
FileinputStream 所有输入流的父类

方法和output一致,首先创建关联,然后读文件,然后关闭数据流

private static void fun1() throws FileNotFoundException, IOException {
        File file = new  File("/Users/lanou/Desktop/test/wl.txt");
        FileInputStream inputStream = new FileInputStream(file);
        //开始读取
        int read = inputStream.read();
        System.out.println((char)read);
        read = inputStream.read();
        System.out.println((char)read);
        read = inputStream.read();
        System.out.println((char)read);
        read = inputStream.read();
        System.out.println((char)read);
        read = inputStream.read();
        System.out.println((char)read);
        //当读取到 文件末尾时候会返回-1,相当于文件都读完了
        read = inputStream.read();
        System.out.println(read);
        read = inputStream.read();
        System.out.println(read);
        //关闭资源
        inputStream.close();
    }


 循环读文件  
private static void fun2() throws FileNotFoundException, IOException {
        //循环读
        File file = new  File("/Users/lanou/Desktop/test/wl.txt");
        FileInputStream inputStream = new FileInputStream(file);
        //read 方法 每调用一次 就读取一个字节
        //循环的时候 read方法只能出现一次
        //只声明一个变量保存读出来的结果
        int num =0;
        while((num = inputStream.read())!=-1) {
            System.out.println(num);
        }
    }

File file = new  File("/Users/lanou/Desktop/test/wl.txt");
    FileInputStream inputStream = new FileInputStream(file);

byte[] b = new byte[1024];
 int i =inputString.read(b);
 System.out.println(new String(b));

转换流在内存中的表现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值