文件

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

// 检验指定路径下是否存在指定的目录或者文件.
        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.
文件_第1张图片
构造函数

说明:
如果指定的路径不存在(没有这个文件或是文件夹),不会抛异常,这时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。

文件_第2张图片
create

删除

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

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

文件_第3张图片
delete

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

判断

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

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

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

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

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

文件_第4张图片
judge

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

获取

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

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

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

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

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

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

文件_第5张图片
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。

文件_第6张图片
getFile

输入流

输入字节流体系:

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

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

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

文件_第8张图片
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. 建立数据的输出通道

你可能感兴趣的:(文件)