文件

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

// 检验指定路径下是否存在指定的目录或者文件.
        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. 建立数据的输出通道
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容