Java IO流

一,File

1.1 File类的概念

File类表示文件或者文件夹的虚拟路径,创建File类对象时,需要明确这个对象指向的路径是什么,指向的路径可以是文件也可以是文件夹,表示的是当前对象指向这个路径,后续针对这个对象的操作都基于这个对象所指向的路径的。

1.2 File 类的构造函数

  1. new File(String path)

  2. new File(String parent,String child)

  3. new File(File parent,String child)

1.3 常用方法

1.3.1 创建和删除

  1. createNewFile()

  2. mkdir()

  3. mkdirs()

  4. delete()

  5. deleteOnExit()

1.3.2 判断相关

  1. isFile()

  2. isDirectory()

  3. exists()

  4. isAbsolute()

1.3.3 获取相关

  1. length():获取文件大小(单位是字节)

  2. getParent():获取父目录的路径

  3. getParentFile():获取父目录的文件对象

  4. getPath():获取路径,返回路径的形式与当初创建时的形式一致;如果创建时是以相对路径来创建的,返回结果也是相对路径的;如果创建时是以绝对路径来创建的,返回结果也是绝对路径的;

  5. getAbsolutePath():获取绝对路径

  6. getTotalSpace():获取当前盘符的总容量

  7. getFreeSpace():获取空闲容量的大小

  8. getName():获取文件名

1.4 文件的遍历

  1. list():返回当前目录中所有文件、文件夹的名字组成的字符串数组

  2. listFiles():返回当前目录中所有文件对象组成的数组

  3. listFiles(FileFilter filter)

    File f = new File("C:\\Users\\86151\\Desktop\\Java2104\\day10\\视频");
    File[] files = f.listFiles(new FileFilter(){
        @Override
        public boolean accept(File f) {
            if(!f.getName().endsWith("avi")&& !f.getName().endsWith("mp4")&&!f.getName().endsWith("wmv")){
                return false;
            }
            if(f.length() / 1024.0 / 1024 > 100){
                return true;
            }else{
                return false;
            }
        }
    });
    System.out.println(files.length);
    for(File file : files){
        System.out.println(file);
    }
  4. listFiles(FilenameFilter filter)

    File f = new File("C:\\mine\\Java\\数据库");
    File[] files = f.listFiles(new FilenameFilter(){
        // 参数1:当前要遍历的目录 参数2:这个目录中所有文件的文件名
        @Override
        public boolean accept(File dir, String name) {
            File f = new File(dir,name);
            return f.length() / 1024 / 1024 > 10;
        }
    });
    System.out.println(files.length);
    for(File file : files){
        System.out.println(file);
    }

1.5 文件的递归

递归

概念:方法直接或者间接的调用自身

核心思想:把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解

好处:大大地减少了程序的代码量

递归的条件:

  1. 方法要有前进段和返回段

  2. 递归的过程中必须要判断边界条件

  3. 如果边界条件不满足,应该继续递归;如果边界条件满足,应该结束递归;一般,上一次的递归结果是下一次的递归开始

二,IO流

2.1 概念

IO流:我们将数据的传递看成数据的流动,所以使用i(input输入)、o(output输出)来描述数据的流向

IO流的划分:

  1. 根据流向:

    1. 输入流:外部 -> 内存

    2. 输出流:内存 -> 外部

  2. 根据文件类型:

    1. 字节流:操作任何类的文件

    2. 字符流:操作文本文件

IO流的四个顶层父类:它们都是抽象类

  1. InputStream:字节输入流

  2. OutputStream:字节输出流

  3. Reader:字符输入流

  4. Writer:字符输出流

2.2 FileOutputStream 文件字节输出流

构造方法:

  1. new FileOutputStream(String path,boolean append)

  2. new FileOutputStream(String path)

  3. new FileOutputStream(File f,boolean append)

  4. new FileOutputStream(File f)

常用方法:

  1. write(int i):将一个整数根据ASCII码所对应的字符写入文件中

  2. write(byte[] bs)

  3. write(byte[] bs,int offset,int len)

  4. flush():将缓冲区中的数据写入到目标位置

  5. close():释放资源

2.3 FileInputStream 文件字节输入流

构造函数:

  1. new FileInputStream(String path)

  2. new FileInputStream(File f)

常用方法:

  1. read():读取单个字节,返回这个字符所对应的整数值,-1表示没有内容被读取到

  2. read(byte[]):将文件中的内容读取到字节数组中,返回读到的字节数量

  3. close():释放资源

File f = new File("C:\\Users\\86151\\Desktop\\Java2104\\day19\\视频\\a.wmv");
FileInputStream fis = new FileInputStream(f);
FileOutputStream fos = new FileOutputStream("C:\\Users\\86151\\Desktop\\软件\\test.wmv");
byte[] bs = new byte[1024];
int len = 0;
while((len = fis.read(bs))!=-1){
 fos.write(bs,0,len);
}
f.deleteOnExit();
fos.close();
fis.close();

2.4 FileWriter 文件字符输出流

构造函数:

  1. new FileWriter(String path,boolean append)

  2. new FileWriter(String path)

  3. new FileWriter(File f,boolean append)

  4. new FileWriter(File f)

常用方法:

  1. write(int c)

  2. write(String s)

  3. write(String s,int offset,int len)

  4. write(char[] chs)

  5. write(char[] chs,int offset,int len)

  6. flush()

  7. close()

flush()和close():

  1. flush():用于将缓冲区中的内容刷新到目标地址,刷新后当前的流可以继续使用

  2. close():用于关闭流,释放资源,在调用后也会将缓冲区中的内容刷新到目标地址,但是close()之后不能在使用该流

2.5 FileRead 文件字符输入流

构造函数:

2.6 缓冲流

也称为高效流,它是对四个文件流的加强。它的读写速度更快

  1. BufferedOutputStream:字节缓冲输出流

  2. BufferedInputStream:字节缓冲输入流

  3. BufferedWriter:字符缓冲输出流

  4. BufferedReader字符缓冲输入流

2.7 对象流

在Java中允许将一个对象存储到文件中,也可以将一个文件中的对象解析到代码中,这种操作要使用对象流来完成。

序列化:将一个对象存储到文件中

反序列化:将一个对象中文件中解析到程序中

注:如果要将一个类的对象写入到文件中,那么这个类必须实现Serializable接口

关键字:transient瞬态,表示当前属性不能被持久化到文件中

2.8 Properties 属性集

它本质上是一个Map,但是它的键和值只能是字符串类型的,一般使用Properties写配置文件

注:Properties配置文件中,每一条配置信息要独占一行,并且键值对的格式如下:

key=value

格式中的=可以替换成:或者空格,建议使用=

构造函数:

  1. new Properties()

常用方法:

  1. load(Reader r)

  2. load(InputStream is)

    注:以上两个方法都是在Properties内加载输入流对象

  3. getProperty(String key)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值