文件

<small>

文件 目录(信息)

文件目录信息类

new File(String pathName)

此构造绝对不是创建文件,仅仅表示根据抽象路径pathName,创建一个File文件实例
File实例,并不能说明文件就真实存在,只是用来判断文件目录是否真实存在

boolean createNewFile()

创建文件并返回是否创建成功

boolean delete()

删除文件

boolean isFile()

判断是否为文件

boolean isDirectory()

判断是否为目录
程序实例:

String pathName = "E:\\ksxx\\所有知识点讲解\\21\\demo.txt";
        //创建一个File实例
        File file = new File(pathName);
        boolean exists()
         */
        boolean isExists = file.exists();
        System.out.println("文件是否存在:"+isExists);
        if(!isExists){
            boolean isCreateFileOk = 
                    file.createNewFile();
            System.out.println(isCreateFileOk?"创建文件成功":"创建文件失败");
        }else{
            boolean isDeleteFileOk = file.delete();
            System.out.println(isDeleteFileOk?"删除文件成功":"删除文件失败");
        }
pathName = "E:\\";
        file = new File(pathName);
        System.out.println("E:\\存在:"+file.exists());
boolean isFile = file.isFile();
        System.out.println(isFile?"E:\\是文件":"E:\\不是文件");
boolean isDirectory = file.isDirectory();
        System.out.println(isDirectory?"E:\\是目录":"E:\\不是目录");
file = new File("/");
        System.out.println(file.isDirectory()?"/是目录":"/不是目录");
pathName = "E:"+File.separator+"ksxx"+File.separator+
                    "所有知识点讲解"+File.separator+
                    "21"+File.separator+"demo.txt";
        System.out.println(pathName);
pathName = "../demo02.txt";
        file = new File(pathName);
        file.createNewFile();//创建当前目录下的demo01.t

1、windows与linux的区别:
* widows中,目录的表示为
* 没有根目录,但有盘符,
* 如:C:\、D:\、E:\、F:\、U盘等
* linux中,目录的表示为 /
* 没有盘符概念,但有且只有一个根目录。
* 所有的路径都是从根目录出发。
* U盘被视为挂载点。
*
* 不管是什么系统的服务器,
* 可以利用File.separator来实现目录的自动辨析。
* 当遇到是windows系统服务器,就会自动填充
* 当遇到是linux系统服务器,就会自动填充 /

/*
* 2、/、./与../的区别
* 如果后面不跟内容,点后面的/可以省略(建议不要省略)
*
* / 根路径
* ./(可以直接省略) 用来表示当前目录下
* [./]../ 用来表示上级目录
*
* 绝对路径:
* 以 / 开头的路径。
*
* 相对路径:
* 以./货../ 开头的路径。

long length()

获得文件的大小(字节量)

lastModified()

获得文件最后一次修改时间

public class FileDemo02 {
    public static void main(String[] args) throws IOException {
        /*
         * File:文件目录信息类
         *   查询文件信息方法
         */
        String pathName = 
                "E:\\ksxx\\所有知识点讲解\\21\\demo.txt";
        //创建一个File实例
        File file = new File(pathName);
        /*
         * 6、获得文件的大小(字节量)
         *    long length()
         */
        long bytes = file.length();
        System.out.println("demo.txt文件大小:"+bytes);
        
        /*
         * 7、获得文件的最后一次修改时间
         */
        long lastModifiedTime = file.lastModified();
        System.out.println("demo01.txt最后一次修改时间:"+new Date(lastModifiedTime));
        
        System.out.println("是否为可读文件:"+file.canRead());
        System.out.println("是否为可写文件:"+file.canWrite());
        System.out.println("是否为可执行文件:"+file.canExecute());
        System.out.println("是否为隐藏文件:"+file.isHidden());
        
        System.out.println("获得文件名:"+file.getName());
        System.out.println("获得目录名:"+file.getParent());
        System.out.println("获得抽象路径:"+file.getPath());
boolean midir();

只能创建单级目录,只有上级目录存在的前提下,才能创建单级目录。如果多级目录不存在,则无法创建。

boolean mkdirs

可以创建多级目录

RandomAcessFile

文件读写操作类:可以通过File实例对文件实现读写操作。
RandomAccessFile的构造及注意事项
* RandomAccessFile(String name,String mode)
* RandomAccessFile(File file,String mode)
*
* 构造二,其实是对构造一的封装。
* RandomAccessFile(new File(name),String mode)
*
* 构造参数:
* 第一个参数:字符串类型的抽象路径
* 也可以是抽象路径封装好的File实例。
*
* 第二个参数:读写模式
* 读:r (read)
* 写:w (write)
*
* RandomAccessFile对象创建的
* 注意事项:
* 1、文件路径(文件所在的目录)非真实存在,
* 会抛出异常:FileNotFoundException
* 2、文件路径(文件所在的目录)真实存在,
* 只不过是文件不存在:
* ①、只读模式,必须要求文件存在,
* 否则抛出FileNotFoundException
* ②、读写模式,文件不存在,
* 会自动创建文件。

RandomAccessFile(String name,String mode)
RandomAccessFile(File file,String mode)
String pathName = "./demo01.txt";
        RandomAccessFile raf = 
                new RandomAccessFile(pathName,"rw");
        //或者
        File file = new File(pathName);
        raf = new RandomAccessFile(file,"rw");

文件的读写

单个字节的读写
String pathName = "./demo01.txt";
        RandomAccessFile raf = 
                new RandomAccessFile(pathName,"rw");
raf.write('a');//a
        raf.write(353);//其实写进去还是a
        raf.write(865);//其实写进去还是a
int read1 = raf.read();
//      System.out.println(read1);//-1表示读取到文件末尾
raf.close();//读写完毕后,需要关闭io通道在一定意义上,就是Ctrl+S保存
raf = new RandomAccessFile(pathName,"rw");
        int read1 = raf.read();
        System.out.println(read1);//97
        
        int read2 = raf.read();
        System.out.println(read2);//97
        
        int read3 = raf.read();
        System.out.println(read3);//97
        
        int read4 = raf.read();
        System.out.println(read4);//-1
        
        raf.close();

文件的复制

单字节复制
RandomAccessFile file = 
                new RandomAccessFile("16.rar","rw");
        RandomAccessFile copyFile = 
                new RandomAccessFile("16_copy.rar","rw");
        
        long startTime = System.currentTimeMillis();
        /*
         * 要对文件实现单字节的读写操作,
         *  必须使用循环来完成。
         */
        int read = 0;
        //对file进行单字节读取操作
        while((read = file.read()) != -1){
            //读一个字节
            //对copyFile进行单字节写操作
            copyFile.write(read);//写
        }
        
        //读写完毕,要关流
        file.close();
        copyFile.close();
        long endTime = System.currentTimeMillis();
        //969128ms
        System.out.println("本次拷贝,用时:"+(endTime - startTime)+"ms");
字节数组的复制
public static void main(String[] args) throws IOException {
        /*
         * 通过RandomAccessFile批量字节的读写操作
         *      来完成对文件16.rar的拷贝。
         *      目标文件为16_copy.rar
         *      
         *      实现步骤:
         *          先对16.rar文件进行批量字节读取。
         *          读取的字节,
         *          向16_copy.rar中写。
         */
        RandomAccessFile file = 
                new RandomAccessFile("16.rar","rw");
        RandomAccessFile copyFile = 
                new RandomAccessFile("16_copy2.rar","rw");
        
        long startTime = System.currentTimeMillis();
        /*
         * 要对文件实现单字节的读写操作,
         *  必须使用循环来完成。
         */
        int read = 0;
        byte[] buf = new byte[1024];
        //对file进行字节数组读取操作
        while((read = file.read(buf)) != -1){
            //读字节数组
            //对copyFile进行字节数组写操作
            copyFile.write(buf);//写
        }
        
        //读写完毕,要关流
        file.close();
        copyFile.close();
        long endTime = System.currentTimeMillis();
        //1158ms
        System.out.println("本次拷贝,用时:"+(endTime - startTime)+"ms");

字节数组的复制效率高很多

总结:
file只是文件目录的信息类,根据抽象路径,创建file实例,通file实例,可以查询文件,目录的相关信息
file不代表文件本身,并不能对文件实现读写操作

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

推荐阅读更多精彩内容