• JAVA Class19


    学习内容:

    1.File类:

    (1)三种构造方式:

    public class Test {
        public static void main(String[] args) {
            File f = new File("d:\test\test.txt");
            File parent = new File("d:\test");
            File child = new File(parent,"test.txt");
            File pc = new File("d:\test","test.txt");
        }
    
    }

    绝对路径问题:File file = new File("..\io");//基于当前java文件的位置

    (2)常用方法:

    create.exists(),判断路径是否存在

    createNewFile(),创建一个文件

    mkdirs(),创建多级目录的文件夹

    delete(),删除文件,如果是删除文件夹,则只能删除空文件夹

    isDirectory(),判断是否是文件夹

    getAbsolutePath(),获取绝对路径

    getPath(),获取绝对路径

    getParentFile(),获取父级File,返回的是File对象!

    getParent(),获取父级路径名,返回String

    getCanonicalPath(),获取绝对路径

    getName(),获取文件名

    exists(),判断路径是否存在

    lastModified(),最后修改时间,返回毫秒值

    listFiles(),以文件数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹)

    public class Test {
        public static void main(String[] args) {
            File f = new File("d:\test\test.txt");
            try {
                File create = new File("d:\test\study.txt");
                if(!create.exists()) {
                    create.createNewFile();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                File cfile = new File("d:\study");
                if(!cfile.exists()) {
                    System.out.println(cfile.mkdirs());//创建多级目录
                    //cfile.mkdir() 创建单级目录
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                File delete = new File("d:\study");
                //System.out.println(delete.delete());//只能删除空文件夹
                System.out.println(delete.isDirectory());//是否是文件夹
                System.out.println(delete.getAbsolutePath());//获取绝对路径
                System.out.println(delete.getCanonicalPath());//获取相对路径
                System.out.println(delete.getName());//获取文件名
                System.out.println(delete.lastModified());//返回最后修改时间,毫秒值
                // 以文件数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹)
                File[] fs = delete.listFiles();
                for(File all:fs) {
                    System.out.println(all);
                }
                File fl= new File("D:\study");
                File[] fls = fl.listFiles(new MyFilter());//文件名过滤器
                for(File ff:fls) {
                    if(ff.isDirectory()) {
                        System.out.println(ff);
                    }
                    
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }

    (3)FileFilter接口

    该接口提供accept方法,返回布尔值,可在调用listFiles方法时添加过滤规则,如果true,则向File数组添加元素,反之不添加。

    public class MyFilter implements FileFilter{
    
        @Override
        public boolean accept(File pathname) {
            String s = pathname.getName();
            if(s.endsWith("txt")) {
                return true;
            }else {
                return false;
            }
        }
    }

    2.递归

    在方法内调用当前方法,可以用来代替for循环,但是要注意,使用递归一定要注意设置跳出循环的条件,不然会造成栈溢出错误!

    public class Test {
        static int a=0;
        static int sum = 0;
        public static void test() {
            a++;
            if(a<=10) {
                sum+=a;
                test();
            }else{
                System.out.println(sum);
                System.out.println("over");
            }
        }
        public static int test2(int n) {
            if(n==1) {
                return 1;
            }else {
                return n+test2(n-1);
            }
        }
        public static int test3(int n) {
            if(n==1) {
                return 1;
            }else {
                return n*test3(n-1);
            }
        }
        public static void main(String[] args) {
            //test();
            //System.out.println(test2(10));
            //System.out.println(test3(5));
        }
    
    }

     3.字节流

    字节流分为输入流和输出流,即inputstream和outputstream,通过输入输出流来操作外部文件。

    (1)输出流

    调用write方法来写数据,一次读取一个字节

    构造方法:

    FileOutputStream fos = new FileOutputStream(f);//如果路径文件存在,执行覆盖,如果File路径不存在,直接创建路径
    FileOutputStream fos = new FileOutputStream(f,true);//不覆盖原文件,可继续写入内容
    public class Test {
        public static void main(String[] args) {
    
            File f = new File("d:\test\test.txt");
            try (FileOutputStream fos = new FileOutputStream(f);){//如果路径文件存在,执行覆盖,如果File路径不存在,直接创建路径文件,
            //注意,如果输入的是文件夹地址会报错!
    //FileOutputStream fos1 = new FileOutputStream(f,true);//不覆盖文件,继续添加 byte[] in = {-48,-49,-50,-51,-20,-91};//如果是负数,则传入汉字,一个汉字两个字节 fos.write(in);//传入一个byte数组 fos.write(50);//传入单个字节值 fos.write(in, 0, 2);//左开右闭 byte[] word = "hello".getBytes(); } catch (Exception e) { e.printStackTrace(); } } }

    (2)输入流

    调用read方法来读取数据,一次读取一个字节

    package edu.java.io;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class Test {
        public static void main(String[] args) {
            File f = new File("d:\test\test.txt");
            try (FileInputStream fis = new FileInputStream(f)){
                byte[] read = new byte[(int)f.length()];
                int a = fis.read(read);//返回有效字节个数,和f.length()相同
                for(byte b:read) {
                    System.out.print(b);//输出单个字节
                    System.out.println((char)b);//输出单个字符
                }
                String str = new String(read,0,read.length);//直接生成一个String
                System.out.println(str);
            } catch (IOException e) {
                e.printStackTrace();
                throw new RuntimeException("文件读取错误!");
            }
        }
    
    }
    注意: new String(read,0,read.length)的构造方法:三个参数分别为byte数组名,起始下标,字节个数,例如new String(read,0,2),读取从下标0开始的2个字符

     4.IO异常处理:

    输入输出流必须被正确关闭,可以用try with resource(JDK1.7特性)即 try()方式关闭,或者在finally中关闭

    public class Test {
        public static void main(String[] args) {
            File f = new File("d:\test\test.txt");
            //IO异常一般不能处理,只能打印错误信息或者抛出运行时异常
            FileOutputStream fos =null;//注意作用域,定义在try catch 外部
            try {
                fos = new FileOutputStream(f,true);
                String str = "JAVA是世界上最好的语言";
                byte[] s= str.getBytes();
                fos.write(s);
            } catch (IOException e1) {
                e1.printStackTrace();
                throw new RuntimeException("文件写入失败,请重试!");
            } finally {
                if(fos!=null) {
                    try {
                        fos.close();
                    } catch (IOException e3) {
                        e3.printStackTrace();
                    }
                }
            }
            try (FileInputStream fis = new FileInputStream(f);){
                byte[] b = new byte[(int)f.length()];
                fis.read(b);
                for(byte r:b) {
                    System.out.println(r);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }   
  • 相关阅读:
    ubuntu下如何关闭某个端口?
    linux如何将某个用户加入到其它组?
    linux如何离线加载docker镜像?
    linux下如何查看当前内核的配置?
    linux下如何单独编译设备树?
    在编译内核之前到底应该使用make mrproper,make distclean,make clean中的哪个命令呢?
    dts是如何来描述iommu与PCI(e)之间的关系?
    iommu是干什么的呢?
    ubuntu下如何使用apt-get安装arm64的交叉编译工具链?
    oracle 10g函数大全--日期型函数
  • 原文地址:https://www.cnblogs.com/whwjava/p/8889968.html
Copyright © 2020-2023  润新知