文件

作者: ForeverYoung20 | 来源:发表于2015-10-13 22:44 被阅读191次

    检验指定路径下是否存在指定的目录或者文件.

    // 检验指定路径下是否存在指定的目录或者文件.
            File file = new File("c:\\a.txt");
            System.out.println(file.exists());
    // File对象是否是目录
            System.out.println(file.isDirectory());
    // 对象是否是文件
            System.out.println(file.isFile());
    

    结论:File对象也可以表示不存在的文件。其实代表了一个抽象路径
    构建一个File类的实例并不会在机器上创建一个文件.不管文件是否存在都可以创建任意文件名的File实例,可以调用File实例的exists方法判断文件或目录是否存在

    构造一个File类实例:

    new File(String pathname); 
    //通过将给定路径来创建一个新File实例。
    new File(String parent, String child); 
    //根据parent路径名字符串和child路径名创建一个新File实例。
      parent是指上级目录的路径,完整的路径为parent+child.
    new File(File parent, String child); 
    //根据parent抽象路径名和child路径名创建一个新File实例。 
     parent是指上级目录的路径,完整的路径为parent.getPath()+child.
    
    构造函数

    说明:
    如果指定的路径不存在(没有这个文件或是文件夹),不会抛异常,这时file.exists()返回false。

    注意:

    1. 创建File对象需要导包, import java.io.File
    2. File对象没有无参数构造.创建对象需要传参.

    路径分隔符

    1. 上下级文件夹之间使用分隔符分开:
      在Windows中分隔符为'',在Unix/Linux中分隔符为'/'。
    2. 跨平台的目录分隔符
      更专业的做法是使用File.separatorChar,这个值就会根据系统得到的相应的分割符。

    例:
    new File("c:" + File.separatorChar + "a.txt");
    注意,如果是使用"",则需要进行转义,写为"\"才可以,如果是两个"",则写为"\\"。

    绝对路径与相对路径

    对于UNIX平台,绝对路径名的前缀是"/"。相对路径名没有前缀。

    对于Windows平台,绝对路径名的前缀由驱动器号和一个":"组成,例"c:\..."。相对路径没有盘符前缀。

    相对路径:
    相对路径是指相对于某位置的路径,是指相对于当前目录。
    在执行Java程序时,相对路径为执行java命令时当前所在的目录。

    创建

    createNewFile()
    在指定位置创建一个空文件,成功就返回true,如果已存在就不创建然后返回false

    mkdir()
    在指定位置创建目录,这只会创建最后一级目录,如果上级目录不存在就抛异常。

    mkdirs()
    在指定位置创建目录,这会创建路径中所有不存在的目录

    renameTo(File dest)
    重命名文件或文件夹,也可以操作非空的文件夹,文件不同时相当于文件的剪切,剪切时候不能操作非空的文件夹。移动/重命名成功则返回true,失败则返回false。

    create

    删除

    delete()
    删除文件或一个空文件夹,如果是文件夹且不为空,则不能删除,成功返回true,失败返回false。

    deleteOnExit()
    在虚拟机终止时,请求删除此抽象路径名表示的文件或目录,保证程序异常时创建的临时文件也可以被删除

    delete

    输出结果:
    文件a.txt存在么?false
    目录a存在么?true

    判断

    exists()
    文件或文件夹是否存在。

    isFile()
    是否是一个文件,如果不存在,则始终为false。

    isDirectory()
    是否是一个目录,如果不存在,则始终为false。

    isHidden()
    是否是一个隐藏的文件或是否是隐藏的目录。

    isAbsolute()
    测试此抽象路径名是否为绝对路径名。

    judge

    输出结果:
    文件是否存在true
    是否是文件:true
    是否是目录:true
    是否是隐藏文件false
    是否为绝对路径true

    获取

    getName()
    获取文件或文件夹的名称,不包含上级路径。

    getPath()
    返回绝对路径,可以是相对路径,但是目录要指定

    getAbsolutePath()
    获取文件的绝对路径,与文件是否存在没关系

    length()
    获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L。

    getParent()
    返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null

    lastModified()
    获取最后一次被修改的时间。

    getFile

    输出结果:
    file的文件名:d.txt
    dir的路径:F:\a
    dir的绝对路径:F:\a
    file的父目录:F:\
    file的大小:0
    file最后一次修改的时间:
    2015年10月13日 15时18分09秒

    文件夹相关:

    staic File[] listRoots()
    列出所有的根目录(Window中就是所有系统的盘符)

    list()
    返回目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null。

    list(FilenameFilter filter)
    返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。

    listFiles()
    返回目录下的文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null。

    listFiles(FilenameFilter filter)
    返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。

    getFile

    输入流

    输入字节流体系:

    ----| InputStream 输入字节流的基类。 抽象
    ----------| FileInputStream 读取文件数据的输入字节流
    ----------| BufferedInputStream 缓冲输入字节流 缓冲输入字节流的出现主要是为了提高读取文件数据的效率。
    其实该类内部只不过是维护了一个8kb的字节数组而已。

    注意: 凡是缓冲流都不具备读写文件的能力。

    1. 使用FileInputStream读取文件数据的步骤:
      1. 找到目标文件
      2. 建立数据的输入通道。
      3. 读取文件中的数据。
      4. 关闭 资源.

    input.png

    输出字节流

    --------| OutputStream 所有输出字节流的基类 抽象类
    ------------| FileOutputStream 向文件 输出数据 的输出字节流
    ------------| Bufferedoutputstream 缓冲输出字节流
    BufferedOutputStream出现的目的是为了提高写数据的效率。
    内部也是维护了一个8kb的字节数组而已。

    1. FileOutputStream如何使用呢?

      1. 找到目标文件
      2. 建立数据的输出通道。
      3. 把数据转换成字节数组写出。
      4. 关闭资源
    2. FileOutputStream要注意的细节:

      1. 使用FileOutputStream 的时候,如果目标文件不存在,那么会自动创建目标文件对象。
      2. 使用FileOutputStream写数据的时候,如果目标文件已经存在,那么会先清空目标文件中的数据,然后再写入数据。
        3.使用FileOutputStream写数据的时候, 如果目标文件已经存在,需要在原来数据基础上追加数据的时候应该使用new FileOutputStream(file,true)构造函数,第二参数为true。
        4.使用FileOutputStream的write方法写数据的时候,虽然接收的是一个int类型的数据,但是真正写出的只是一个字节的数据,只是把低八位的二进制数据写出,其他二十四位数据全部丢弃。
        00000000-000000000-00000001-11111111 511
        11111111---> -1

    使用BufferedInputStream的步骤 :

    1. 找到目标文件。
    2. 建立数据 的输入通道
    3. 建立缓冲 输入字节流流
    4. 关闭资源

    使用BufferedOutputStream的步骤:

    1. 找到目标文件
    2. 建立数据的输出通道
    3. 建立缓冲 输出字节流
    4. 关闭资源

    BufferedOutputStream 要注意的细节

    1. 使用BufferedOutStream写数据的时候,它的write方法是是先把数据写到它内部维护的字节数组中。
    2. 使用BufferedOutStream写数据的时候,它的write方法是是先把数据写到它内部维护的字节数组中,如果需要把数据真正的写到硬盘上面,需要调用flush方法或者是close方法、 或者是内部维护的字节数组已经填满数据的时候。
    //复制图片
    package com.cyl.file;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class BufferDemo {
    
        public static void main(String[] args) {
            demo();
        }
        
        public static void demo() {
            File file = new File("F:\\图片\\欧美\\abc.jpg");
            File file2 = new File("F:\\b.jpg");
            FileInputStream fileInputStream = null;
            FileOutputStream fileOutputStream = null;
            BufferedInputStream bufferedInputStream = null;
            BufferedOutputStream bufferedOutputStream = null;
            try {
                fileInputStream = new FileInputStream(file);
                fileOutputStream = new FileOutputStream(file2);
                bufferedInputStream = new BufferedInputStream(fileInputStream);
                bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
                
                int len = 0;
                while((len = bufferedInputStream.read()) != -1) {
                    bufferedOutputStream.write(len);
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }finally {
                try {
                    if(fileOutputStream != null) {
                        bufferedOutputStream.close();
                    }
                } catch (IOException e) {
                    throw new RuntimeException(e);      
                }
                try {
                    if(fileInputStream != null) {
                        bufferedInputStream.close();
                    }
                } catch (IOException e) {
                    throw new RuntimeException(e);      
                }
            }
        }
    }
    

    输入字符流:

    -------| Reader 所有输入字符流的基类。 抽象类
    ----------| FileReader 读取文件字符串的输入字符流。
    ----------| BufferedReader 缓冲输入字符流 。 缓冲 输入字符流出现的目的是为了提高读取文件 的效率和拓展了FileReader的功能。 其实该类内部也是维护了一个字符数组

    记住:缓冲流都不具备读写文件的能力。

    FileReader的用法:

    1. 找到目标文件
    2. 建立数据的输入通道
    3. 读取数据
    4. 关闭资源

    BufferedReader的使用步骤:

    1.找到目标文件
    2 .建立数据的输入通道。

    输出字符流

    ----------| Writer 所有输出字符流的基类, 抽象类。
    --------------- | FileWriter 向文件输出字符数据的输出字符流。
    ----------------| BufferedWriter 缓冲输出字符流
    缓冲输出字符流作用: 提高FileWriter的写数据效率与拓展FileWriter的功能。
    BufferedWriter内部只不过是提供了一个8192长度的字符数组作为缓冲区而已,拓展了FileWriter的功能。

    FileWriter的使用步骤:

    1. 找到目标文件。
    2. 建立数据输出通道
    3. 写出数据。
    4. 关闭资源

    FileWriter要注意的事项:

    1. 使用FileWriter写数据的时候,FileWriter内部是维护了一个1024个字符数组的,写数据的时候会先写入到它内部维护的字符数组中,如果需要把数据真正写到硬盘上,需要调用flush或者是close方法或者是填满了内部的字符数组。
    2. 使用FileWriter的时候,如果目标文件不存在,那么会自动创建目标文件。
    3. 使用FileWriter的时候, 如果目标文件已经存在了,那么默认情况会先情况文件中的数据,然后再写入数据 , 如果需要在原来的基础上追加数据,
      需要使用“new FileWriter(File , boolean)”的构造方法,第二参数为true。

    BufferedWriter如何使用?

    1. 找到目标文件
    2. 建立数据的输出通道

    相关文章

      网友评论

        本文标题:文件

        本文链接:https://www.haomeiwen.com/subject/wzpocttx.html