File类与I/O流

一、File类

1、访问文件名相关的方法

String getName()

返回此File对象的文件名或者路径名(如果是路径,则返回最后一级子路径名)

String getPath()

返回此File对象返回的路径名

File getAbsoluteFile()

返回此File对象所对应的绝对路径所对应的File对象

String getAbsolutePath()

返回此File对象所对应的绝对路劲名

String getParent()

返回此File对象所对应目录(最后一级子目录)的父目录名。

boolean renameTo(File newName)

重命名此File对象所对应的文件或目录,如果重命名成功,则返回true;否则返回false

2、文件检测相关方法

boolean exists()

判断File对应的目录或者文件是否存在

boolean canWrite()

判断File文件所对应的文件或者目录是否可写

boolean canRead()

判断File对象所对应的文件和目录是否可读

boolean isFile()

判断File对象所对应的是否是文件,而不是目录

boolean isDirectory()

判断File对象所对应的是目录,而不是文件

boolean isAbsolute()

判断File对象所对应的文件或者目录是否是绝对路径

3、获取常规文件信息

long lastModified()

返回文件最后修改的时间

long length()

返回文件内容的长度

4、文件操作相关的方法

boolean createNewFile()

当此file对象所对应的文件不存在时,该方法将新建一个该对象所指定的新文件,如果创建成功则返回true,否则返回false。

boolean delete()

删除file对象所对应的文件或者路径

static File createTempFile(String preFix,String suffix)

在默认的临时文件目录中国创建一个临时的空文件,使用给定的前缀、系统生成的随机数和给定的后缀名作为文件名。这是一个静态方法,可以直接通过File类来调用。prefix参数必须至少是三个字节长。suffix参数可以是空,在这种情况下,将默认使用“.tmp”后缀

static File createTempFile(String preFix,String suffix,File directory)

在directory所指定的目录中创建一个临时的空文件

void deleteOnExit()

注册一个删除钩子,指定当java虚拟机退出时,删除File对象所对应的文件和目录

5、 目录操作相关的方法

boolean mkdir()

试图创造创建一个File对象所对应的目录,如果创建成功,则返回true;否则返回false。调用该方法时File对象必须对应一个路径,而不是一个文件。

String[] list()

列出file对象所有的子文件名,返回String数组

File[] listFile()

列出File对象所有的子文件名和路径,返回File数组

static File[] listRoots()

列出系统所有的根路径

import java.io.File;
import java.io.IOException;

public class demo {
    public static void main(String[] args) throws IOException {
        //以当前路径创造一个File对象
        File file = new File(".");
        //直接获取文件名
        System.out.println(file.getName());
        //获取绝对路径
        System.out.println(file.getAbsoluteFile());
        //获取绝对路径的上一级路径
        System.out.println(file.getAbsoluteFile().getPath());
        //当前路径想创建一个临时文件
        File tempFile = File.createTempFile("aaa",".txt",file);
        //指定当jvm退出时删除该文件
        tempFile.deleteOnExit();
        //以系统当前时间作为新文件名来创建对象
        File newFile = new File(System.currentTimeMillis()+"");
        System.out.println("新对象是否存在"+newFile.exists());
        //以指定的newFile对象来创建一个目录,因为newFile已经存在
        //所以下面方法返回false,即无法创建该目录
        newFile.mkdir();
        //使用list()方法列出当前路径下所有文件和路径
        String[] fileList = file.list();
        System.out.println("=======当前路径下所有文件和路径==========");
        for (String s : fileList) {
            System.out.println(s);
        }
    }
}

运行结果
在这里插入图片描述

6、文件迭代器

在File类的list()方法中可以接收一个FilenameFilter参数,通过该参数可以只列出符合该条件的文件。
FilenameFilter接口里面包含了一个accept(File dir,String name)方法,该方法将依次对指定的File的所有子目录或者文件进行迭代,如果该方法返回true,则list()方法会列出子目录或者文件。

public class myFilenameFilter implements FilenameFilter {
    @Override
    public boolean accept(File dir, String name) {
        //如果文件名.java结尾,或者文件对应一个路径,则返回true
        return name.endsWith(".java")||new File(name).isDirectory();
    }
}

public class FiltenameFilterTest {
    public static void main(String[] args) {
        File file = new File(".");
        String[] nameList = file.list(new myFilenameFilter());
        for (String name : nameList) {
            System.out.println(name);
        }
    }
}

二、理解Java的IO流

1、流的分类

1.1 输入流与输出流

按照流的流向来分可以分为输入流和输出流

  • 输入流:只能从中读取数据而不能向其写入数据
  • 输出流:只能向其写入数据,而不能从中读取数据
  • java的输入流主要由Inputstream 和Reader作为基类,输出流主要由OutputStream和Write作为基类。他们都是一些抽象类,无法直接创建实例。

1. 2、字节流和字符流

字节流和字符流的用法几乎一样,区别在于字节流和字符流所操作的数据单元不同——字节流操作地数据单元是8位字节,而字符流操作大数据单元是16位的字符。
字节流主要以InputStream和OutputStream作为基类,字符流主要以Reader和Write作为基类

1.3 节点流和处理流

按照流的角色来分可以分为节点流和处理流。
可以从/向一个特定的I/O设备(如磁盘、网络)读/写数据的流,称为节点流,节点流也被称之为低级流。
处理流则是用于一个已经存在的流进行输入/输出时,程序直接连接到数据的数据源,和实际的输入/输出节点连接。

2、流的概念模型

java把所有设备里面的有序数据抽象成流模型,简化了输入输出处理。java中的I/O流涉及到40多个类都是从如下4个抽象类中派生出来的。

  • InputStream/Reader:所有输入流的基类,前者是是字节输入流,后者是字符输入流。
  • OutputStream/Writer:所有输出流的基类,前者是字节输入流,后者是字符输出流

3、字节流和字符流

3.1 InputStream和Reader

InputStream和Reader是所有输入流的抽象基类,本身并不能创建实例来执行输入,但他们将成为所有输入流的模板,所以他们的方法就是所有输入流都可以使用的方法。
在InputStream中包含如下三个方法

  • int read():从输入流中读取单个字节,返回所读取的字节数据
  • int read(byte[] b):从输入流中最多读取b.length个字节的数据,并将其储存在自己数组b中,返回实际读取的字节数。
  • int read(byte[] b,int off,int len):从输入流中最多读取len个字节的数据,并将其存储在数组b中,放入数组b时,并不是从数组起点开始,而是从off位置开始,返回实际读取的字节数。

在Reader里包含如下三个方法与InputStream几乎相似

  • int read():从输入流中读取单个字符,返回所读取的字节数据
  • int read(char[] c):从输入流中最多读取c.length个字符的数据,并将其储存在自己数组c中,返回实际读取的字节数。
  • int read(char[]c,int off,int len):从输入流中最多读取len个字符的数据,并将其存储在数组c中,放入数组c时,并不是从数组起点开始,而是从off位置开始,返回实际读取的字节数。

3.2 OutputStream和Writer

OutputStream与Write也非常的相似
OutPutStream也提供办法了三个方法

  • void write(int c):将制定的字节字符输入到指定的输出流中
  • void write(byte[]/char[] buf)将字节数组/字符数组输出到指定的输出流中
  • void write(byte[]/char[] buf,int off,int len):将字节数组/字符数组从off位置开始,长度len的字节/字符输出到输入流。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值