java基础系列09--IO 流(1)

2019-01-14  本文已影响6人  addin_gao

IO 流

File 类

File更应该叫做一个路径 此类位于java.io.File

/*
        * File(String pathname):根据一个路径得到File对象
        * File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
        * File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
        * */
        File file = new File("aa.txt"); // 根据路径File对象这个对象可能不存在
        System.out.println(file);  // aa.txt
        System.out.println(file.exists()); // 判断此文件是否存在,存在返回true
        boolean  creat = file.createNewFile();  // 创建文件,创建成功返回true,否则返回false
        
        File file2 = new File("bb","cc.txt");
//      System.out.println(file2.createNewFile()); // 只能创建一个文件
//      System.out.println(file2.mkdirs()); //创建文件夹,如果父文件夹不存在,会帮你创建出来
        System.out.println(file2.mkdir()); // 创建文件夹 如果存在这样的文件夹,就不创建了,不能创建多个文件夹
        
        
    }

File类的重命名和删除功能:

重命名注意事项:

​ 如果路径名相同,就是改名,如果路径名不同,就是改名并剪切。

File f = new File("aa.txt");
f.createNewFile();
File f1 = new File("bb/bb.txt");
f.renameTo(f1);  // 将aa.txt 剪切到bb文件夹并且改名bb.txt

删除注意事项:

​ Java中的删除不走回收站。要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹

File f = new File("aa.txt");
f.delete();  // 删掉aa.txt
File f1 = new File("bb/aa.txt");
f1.delete();  // 删掉bb下的aa.txt

File类的判断功能:

/* public boolean isDirectory():判断是否是目录
* public boolean isFile():判断是否是文件
* public boolean exists():判断是否存在
* public boolean canRead():判断是否可读
* public boolean canWrite():判断是否可写
* public boolean isHidden():判断是否隐藏
*/
File f = new File("aa.txt");
f.setWritable(false);   // windos 中可以设置可写权限,但是不能设置可读权限,认为都可读
System.out.println(f.canWrite()); // false
f.setReadable(false);
System.out.println(f.canRead()); // true

File类的获取功能:

* public String getAbsolutePath():获取绝对路径
* public String getPath():获取路径
* public String getName():获取名称
* public long length():获取长度。字节数
* public long lastModified():获取最后一次的修改时间,毫秒值
* public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
* public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组 

文件名称过滤器的概述及使用:

public static void main(String[] args) throws IOException{
       /* * public String[] list(FilenameFilter filter)
        * public File[] listFiles(FileFilter filter)
        */
        File dir = new File("E:\\");
//      文件名称过滤器 -- 找出e盘直接子文件下的所有的.jpg结尾的文件名
        String[] endJPGArray =dir.list(new FilenameFilter() {
            
            @Override
            public boolean accept(File dir, String name) {
                File f = new File(dir,name);
                return f.isFile() && f.getName().endsWith(".jpg");
            }
        });
        
        for (String name : endJPGArray) {
            System.out.println(name);
        }
}

File的递归练习

统计一个文件或则文件夹的大小

public class test3 {
    public static void main (String[] args){
        File f = getFile();
        System.out.println(getSize(f));
    }
    public static File getFile(){
        Scanner sc= new Scanner(System.in);
        System.out.println("输入文件夹目录");
        while(true){
            String dirStr = sc.nextLine();
            File f = new File(dirStr);
            if(!f.exists()){
                System.out.println("路径不存在");
            }else{
                return f;
            }
        }
    }
    public static long getSize(File f){
        long l =0;
        if(f.isFile()){
            l +=f.length();
            return l;
        }else{
            File[] fl = f.listFiles();
            for (File file : fl) {
                if (file.isFile()){
                    l +=file.length();
                }else{
                    l += getSize(file); // 递归统计
                }
            }
            return l;
        }
    }  
}

递归删除一个文件或者文件夹

java程序删除的内容不会进垃圾桶的

    public static void main (String[] args){
        File f = getFile();
        delete(f);
    }
    public static File getFile(){
        Scanner sc= new Scanner(System.in);
        System.out.println("输入文件夹目录");
        while(true){
            String dirStr = sc.nextLine();
            File f = new File(dirStr);
            if(!f.exists()){
                System.out.println("路径不存在");
            }else{
                return f;
            }
        }
    }
    public static void delete(File f){
        System.out.println("1111");
        if(f.isFile()){
            f.delete();
        }else{
            File[] fs = f.listFiles();
            for (File file : fs) {
                if(file.isFile()){
                    file.delete();
                }else{
                    delete(file);
                }
            }
            f.delete(); // 删除文件夹内的内容后还要把当前空的文件夹删除掉
        }
    } 

将一个文件或者文件夹拷贝到一个文件夹下面:

public class test3 {
    public static void main (String[] args) throws IOException{
        File src = getFile();
        File dest = getFile();
        if(dest.isFile()){
            System.out.println("拷贝到某个文件夹,而不是文件");
            return;
        }
        if(src.equals(dest)){
            System.out.println("目标文件夹是原文件夹的子文件夹");
            return;
        }
        copy(src,dest);
    }
    public static File getFile(){
        Scanner sc = new Scanner(System.in);
        System.out.println("输入文件夹路径或者文件路径");
        while(true){
            String dir = sc.nextLine();
            File f = new File(dir);
            if(!f.exists()){
                System.out.println("路径不存在");
            }else{
                return f;
            }
        }
    }
    public static void copy(File src,File dest) throws IOException{
        File newfile = new File(dest,src.getName());
        if(src.isFile()){
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newfile));
            int len;
            while((len=bis.read())!=-1){
                bos.write(len);
            }
            bis.close();
            bos.close();
        }else{
            newfile.mkdir();
            File[] files = src.listFiles();
            for (File file : files) {
                copy(file,newfile);
            }
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读