欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

达内课程-File用法(上)

程序员文章站 2022-05-27 14:48:58
...

IO

Input/Output
输入/输出

相对于内存来说的

java.io包
File
RandomAccessFile

InputSteam/OutputStream
FileInputSteam/FileOutputStream
BufferedInputSteam/BufferedOutputStream
DataInputSteam/DataOutputStream
PrintStream
ByteArrayInputSteam/ByteArrayOutputStream
ObjectInputSteam/ObjectOutputStream

Reader/Writer
InputStreamReader/OutputStreamWriter
FileReader/FileWriter
BufferedReader/BufferedWriter
PrintReader

java.io.File

1、封装一个磁盘路径,例如
“d:/a/a.txt”
“d:/a/b/”
2、可以是文件路径,也可以是目录路径
3、可以封装不存在的路径

创建对象
1、File file = new File(“d:/abc/a.txt”);
2、File file = new File(“d:/abc/”,”a.txt”);

方法
文件或目录的属性
canRead()//是否可读
canWrite()//是否可写
canExecute()//是否可执行
isHidden()//是否隐藏文件
exists()//表示的路径是否存在
getAbsolutePath()//完整路径
getName()//文件名
getParent()//父目录
lastModified()//最后修改时间,毫秒值
length()//文件字节量,对目录无效
isDirectory()//是否文件夹
isFile()//是否文件
getTotalSpace//空间大小
getFreeSpace//可用空间

栗子

例如我要使用以下文件

达内课程-File用法(上)

我这样写是会报错的

达内课程-File用法(上)

原因是需要转义,所以需要写成

达内课程-File用法(上)

或者使用另一个方向的斜杠

达内课程-File用法(上)

String path;
        path = "D:/Eclipse/eclipse/readme/readme_eclipse.html";//找一个存在的文件路径

        File f = new File(path);
        System.out.println("可读:"+f.canRead());
        System.out.println("可写:"+f.canWrite());
        System.out.println("可执行:"+f.canExecute());
        System.out.println("是否隐藏:"+f.isHidden());
        System.out.println("是否存在:"+f.exists());
        System.out.println("完整路径:"+f.getAbsolutePath());
        System.out.println("文件名:"+f.getName());
        System.out.println("父目录:"+f.getParent());
        System.out.println("最后修改时间:"+f.lastModified());
        System.out.println("字节量:"+f.length());
        System.out.println("是否目录:"+f.isDirectory());
        System.out.println("是否文件:"+f.isFile());
        System.out.println("总空间:"+f.getTotalSpace());
        System.out.println("可用空间:"+f.getFreeSpace());

输出结果

可读:true
可写:true
可执行:true
是否隐藏:false
是否存在:true
完整路径:D:\Eclipse\eclipse\readme\readme_eclipse.html
文件名:readme_eclipse.html
父目录:D:\Eclipse\eclipse\readme
最后修改时间:1467166182000
字节量:101468
是否目录:false
是否文件:true
总空间:127806730240
可用空间:74330075136

当为存在的目录时

path = "D:/Eclipse/eclipse";//找一个存在的目录路径

输出结果

可读:true
可写:true
可执行:true
是否隐藏:false
是否存在:true
完整路径:D:\Eclipse\eclipse
文件名:eclipse
父目录:D:\Eclipse
最后修改时间:1512106921222
字节量:4096
是否目录:true
是否文件:false
总空间:127806730240
可用空间:74330066944

当path为不存在路径时

path = "E:/bucunzai/demulu";//瞎写一个不存在的路径

输出结果

可读:false
可写:false
可执行:false
是否隐藏:false
是否存在:false
完整路径:E:\bucunzai\demulu
文件名:demulu
父目录:E:\bucunzai
最后修改时间:0
字节量:0
是否目录:false
是否文件:false
总空间:0
可用空间:0

文件或目录操作

createNewFile()//创建文件
delete()//删除文件或”空目录”,能删除目录,但是里边有东西就不能删
mkdir()//创建单层目录
mkdirs()//创建多层目录,如果创建d:/aa/bb/cc/dd,这个方法会补全前面不存在的目录
renameTo()//改名、移动
创建删除重命名方法返回boolean,表示操作成功与否
File createTempFile(前缀,后缀)//在系统临时创建目录

栗子

public static void main(String[] args) throws IOException {
        File f= new File("d:/abc/f1");
        if(f.exists()){
            //文件存在,删除
            boolean b = f.delete();
            System.out.println("删除是否成功:"+b);
        }else{
            //文件不存在,创建
            /*
             *1、文件已经存在,会返回 false
             *2、目录不存在,会出现异常
             */
            boolean b = f.createNewFile();
            System.out.println("创建是否成功:"+b);
        }
    }

因为要创建”d:/abc/f1”,如果”d:/abc”这个目录不存在会出现异常

达内课程-File用法(上)

因此在d盘下新建”abc”目录后再执行

达内课程-File用法(上)

栗子

File f= new File("d:/abc/aa/bb/cc");
        if(f.exists()){
            //文件存在,删除
            boolean b = f.delete();
            System.out.println("删除是否成功:"+b);
        }else{

            boolean b = f.mkdir();
            System.out.println("创建是否成功:"+b);
        }

输出结果

创建是否成功:false

因为路径是”d:/abc/aa/bb/cc”,要创建cc目录,用mkdir()必须保证aa、bb、cc存在才能创建成功

所以可以采用mkdirs()方法,这个方法会补全缺失的目录

达内课程-File用法(上)

再次点击删除,只会删除cc目录,因为路径表示的是cc目录

在cc目录下创建cc.txt,再次执行,删除失败,因为delete能删除目录,但只能删除空目录

达内课程-File用法(上)

栗子
d盘下存在a.txt
d:/a.txt

把存在的路径d:/a.txt封装成File对象f1
把不存在的路径d:/a2.txt封装成File对象f2

调用f1.renameTo(f2)

结果是f1、f2对象都不变,d盘下的a.txt改名为了a2.txt

所以现在f1不存在了。f2存在

File f1 = new File("d:/abc/f1");
        File f2 = new File("d:/abc/fi-copy");
        //异或是找不同,不同返回true,相同返回false
        if(!(f1.exists() ^ f2.exists())){
            System.out.println("两个文件不能同时存在,"+
                        "也不能同时不存在,"+
                        "必须存在其中一个");
            return;
        }
        //如果改名成功
        if(f1.exists()){
            boolean b = f1.renameTo(f2);
            System.out.println("改名成功:"+b);
        }else{
            boolean b = f2.renameTo(f1);
            System.out.println("改名成功:"+b);
        }

输出结果

达内课程-File用法(上)

栗子

创建系统临时目录

查看系统临时目录路径

达内课程-File用法(上)

以下代码会在刚才的临时目录路径下创建临时文件

File f = File.createTempFile("abc", ".txt");
System.out.println(f.getAbsolutePath());

输出结果

C:\Users\00lix\AppData\Local\Temp\abc9158952096480806778.txt

创建完临时文件,可以不用删除,临时文件会被系统或者关键类的工具清理掉,不过最好可以手动删除一下

f.delete();

如果文件名只指定一个字母”a”

File f = File.createTempFile("a", ".txt");
System.out.println(f.getAbsolutePath());

会报错,前缀太短

达内课程-File用法(上)

这个方法对前缀有要求,至少3个字符

相关标签: File

上一篇: 读写文件

下一篇: [GKCTF2020]web