【Day27】输入输出流一

目录

一、缓冲流的使用

二、File类的使用

三、其它流的使用


一、缓冲流的使用

/**
 * 处理流之一:缓冲流的使用
 * BufferedInputStream
 * BufferedOutputStream
 * BufferedReader
 * BufferedWriter
 * 2、作用:提供流的读取,写入速度
 *      提高读写速度的原因,内部提供了一个缓冲区
 *
 * 3、处理流,就是套在已有的流的基础上
 *
 */
public class Bufferedtest {

    @Test
    public void BufferedInputStreamTest(){
        long stast=System.currentTimeMillis();

        //1、造文件
        File file = new File("花花.png");
        File file1 = new File("花花2.png");

        //2、造流
        //2.1造节点流
        FileInputStream fi=null;
        FileOutputStream fo=null;
        BufferedInputStream bd=null;
        BufferedOutputStream bo=null;
        try {
            fi=new FileInputStream(file);
            fo=new FileOutputStream(file1);
            //2.2造缓冲流
            bd=new BufferedInputStream(fi);
            bo=new BufferedOutputStream(fo);

            //3、赋值的细节:读取与写入
            byte[] bytes=new byte[5];
            int len;
            while ((len=bd.read(bytes))!=-1){
                bo.write(bytes,0,len);
            }
            System.out.println("完成");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            /*
            内层流可以省略,因为关闭外层流的同时,内层流也会关闭
             */
            if(bo!=null){
                try {
                    bo.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }if(bd!=null){
                try {
                    bd.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }if(fo!=null){
                try {
                    fo.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }if(fi!=null){
                try {
                    fi.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        long end=System.currentTimeMillis();
        System.out.println("方式一所用时间为:"+(end-stast));//42
    }

    public void copyFile(String str1,String str2){
        //1、造文件
        File file = new File(str1);
        File file1 = new File(str2);

        //2、造流
        //2.1造节点流
        FileInputStream fi=null;
        FileOutputStream fo=null;
        BufferedInputStream bd=null;
        BufferedOutputStream bo=null;
        try {
            fi=new FileInputStream(file);
            fo=new FileOutputStream(file1);
            //2.2造缓冲流
            bd=new BufferedInputStream(fi);
            bo=new BufferedOutputStream(fo);

            //3、赋值的细节:读取与写入
            byte[] bytes=new byte[5];
            int len;
            while ((len=bd.read(bytes))!=-1){
                bo.write(bytes,0,len);
            }
            System.out.println("完成");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            /*
            内层流可以省略,因为关闭外层流的同时,内层流也会关闭
             */
            if(bo!=null){
                try {
                    bo.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }if(bd!=null){
                try {
                    bd.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }if(fo!=null){
                try {
                    fo.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }if(fi!=null){
                try {
                    fi.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Test
    public void runFile(){
        long staet=System.currentTimeMillis();
        String str1="花花.png";
        String str2="花花3.png";
        copyFile(str1,str2);
        long end =System.currentTimeMillis();
        System.out.println("方式二所有时间为:"+(end-staet));//37
    }


    @Test
    public void BufferedReaderWriter(){
        BufferedReader bufferedReader =null;
        BufferedWriter bufferedWriter =null;
        try {
            bufferedReader = new BufferedReader(new FileReader(new File("hello.txt")));
            bufferedWriter = new BufferedWriter(new FileWriter(new File("hello3.txt")));

            //方式一
            char[] chars=new char[5];
            int len;
            while ((len=bufferedReader.read(chars))!=-1){
                bufferedWriter.write(chars,0,len);
                bufferedWriter.flush();
            }

            //方式二:
//            String str;
//            while ((str=bufferedReader.readLine())!=null){
//                bufferedWriter.write(str);
//                bufferedWriter.newLine();
//            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (bufferedReader!=null){
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (bufferedWriter!=null){
                try {
                    bufferedWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

二、File类的使用

/**
 * File类的使用:
 *
 * 1、File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹)
 * 2、File类声明在Java.io包下
 * 3、File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法
 *      并未涉及到写入或读取文件内容的操作,如果需要读取或写入文件内容,必须使用IO流来完成
 * 4、后续File类的对象常会作为参数传递到流的构造器中,指明读取或写入的“终点”
 *
 */
public class FileTest1 {

    //1、创建File类的实例
    //File(String filepath)
    //File(String parentPath,String childPath)
    //File(File parentFile,String childPath)

    //2、相对路径:
    //  绝对路径:包含目录

    @Test
    public void test(){
        //构造器1
        File file=new File("hello.txt");//相对路径
        File file1=new File("D:\\WenJian\\IDEA\\Java高级基础部分\\Day08输入输出流\\src\\File\\hello.txt");//绝对路径


        System.out.println(file);
        System.out.println(file1);
        //构造方法

        //构造器2
        File file2=new File("D:\\WenJian\\IDEA\\Java高级基础部分","Day08输入输出流");
        System.out.println(file2);

        //构造器3
        File file3 = new File(file2, "hello.txt");
        System.out.println(file3);
    }

    @Test
    public void test1(){
        /*
         public String getAbsolutePath():获取绝对路径
         public String getPath() :获取路径
         public String getName() :获取名称
         public String getParent():获取上层文件目录路径。若无,返回null
         public long length() :获取文件长度(即:字节数)。不能获取目录的长度。
         public long lastModified() :获取最后一次的修改时间,毫秒值
         public String[] list() :获取指定目录下的所有文件或者文件目录的名称数组
         public File[] listFiles() :获取指定目录下的所有文件或者文件目录的File数组
         */


        File file=new File("hello.txt");
        File file1 = new File("D:\\WenJian\\IDEA\\Java高级基础部分\\Day08输入输出流\\hello.txt");

        System.out.println(file.getAbsolutePath());
        System.out.println(file.getPath());
        System.out.println(file.getName());
        System.out.println(file.getParent());
        System.out.println(file.length());
        System.out.println(file.lastModified());
        System.out.println(file.list());
        System.out.println(file.listFiles());

        System.out.println();
        //file1
        System.out.println(file1.getAbsolutePath());
        System.out.println(file1.getPath());
        System.out.println(file1.getName());
        System.out.println(file1.getParent());
        System.out.println(file1.length());
        System.out.println(file1.lastModified());
        System.out.println(file1.list());
        System.out.println(file1.listFiles());
    }
    @Test
    public void test2(){
        File file = new File("D:\\WenJian\\IDEA\\Java高级基础部分");
        String[] lists=file.list();
        for (String s:  lists) {
            System.out.println(s);
        }

        //含有绝对路径的输出
        File[] fileps=file.listFiles();
        for (File file1:fileps
             ) {
            System.out.println(file1);

        }
    }
    /*
     public boolean renameTo(File dest):把文件重命名为指定的文件路径
     比如:file1.renameTo(file2):
            要想保证返回true,需要file1在硬盘中是存在的,且file2不能再硬盘中存在
     */
    @Test
    public void test3(){
        File file1 = new File("D:\\WenJian\\IDEA\\Java高级基础部分\\Day08输入输出流\\src\\File\\hello.txt");
        File file2=new File("D:\\WenJian\\IDEA\\fghj\\aa.txt");

        boolean b = file2.renameTo(file1);
        System.out.println(b);
    }


    /*
 public boolean isDirectory():判断是否是文件目录
 public boolean isFile() :判断是否是文件
 public boolean exists() :判断是否存在
 public boolean canRead() :判断是否可读
 public boolean canWrite() :判断是否可写
 public boolean isHidden() :判断是否隐藏
     */
    @Test
    public void test4(){
        File file = new File("D:\\WenJian\\IDEA\\Java高级基础部分\\Day08输入输出流\\src\\File\\hello.txt");
        System.out.println(file.isDirectory());
        System.out.println(file.isFile());
        System.out.println(file.exists());
        System.out.println(file.canRead());
        System.out.println(file.canWrite());
        System.out.println(file.isHidden());

        System.out.println();
        File file1 = new File("D:\\WenJian\\IDEA");
        System.out.println(file1.isDirectory());
        System.out.println(file1.isFile());
        System.out.println(file1.exists());
        System.out.println(file1.canRead());
    }


    /*
 public boolean createNewFile() :创建文件。若文件存在,则不创建,返回false
 public boolean mkdir() :创建文件目录。如果此文件目录存在,就不创建了。
如果此文件目录的上层目录不存在,也不创建。
 public boolean mkdirs() :创建文件目录。如果上层文件目录不存在,一并创建
注意事项:如果你创建文件或者文件目录没有写盘符路径,那么,默认在项目
路径下。

 public boolean delete():删除文件或者文件夹
删除注意事项:
Java中的删除不走回收站。
要删除一个文件目录,请注意该文件目录内不能包含文件或者文件目录

     */
    @Test
    public void test5() throws IOException {

        File file = new File("D:\\WenJian\\IDEA\\Java高级基础部分\\Day08输入输出流\\src\\File\\hello1.txt");
        if(!file.exists()){
            file.createNewFile();
            System.out.println("创建成功");
        }else {
            file.delete();
            System.out.println("删除成功");
        }



    }

    //        D:\WenJian\IDEA\fghj
    // public boolean mkdir() :创建文件目录。如果此文件目录存在,就不创建了。
    //如果此文件目录的上层目录不存在,也不创建。
    @Test
    public void test6(){

        File file1 = new File("D:\\WenJian\\IDEA\\fghj");
        File file = new File("D:\\WenJian\\IDEA\\Java高级基础部分\\Day08输入输出流\\src\\File\\hello.txt");
        if (!file1.exists()) {
            file1.mkdir();
            System.out.println("创建成功");
        }else {
            file1.delete();
            System.out.println("删除成功");
        }
        file.delete();
    }
    /**
     *
     * @description:
     * @author ----千里之行,始于足下----
     * @date 2022/8/22 18:59
     */
    @Test
    public void test7() throws IOException {
        File file = new File("D:\\hello.txt");
        if (!file.exists()) {
            file.createNewFile();
        }
        File file1 = new File(file.getParent(), "hello.txt");
        System.out.println(file);
        file.delete();
    }

    @Test
    public void test8(){
        File file = new File("D:\\WenJian\\IDEA\\Java高级基础部分");
        String[] files=file.list();
        for (String fle :
                files) {
            int length = fle.length();
//            if(fle.substring(length-3).equals("jpg")){
                if(fle.endsWith("jpg")){
            System.out.println(fle);
        }
    }
    }
}

三、其它流的使用

/**
 * 1.1、标准的输入输出流
 *     System.in:标准的输入流,默认从键盘输入
 *     System.out:标准的输出流,默认从控制台输出
 *     1.2
 *     System类的setIn(InputStream is) / setOut(PrintStream ps)方式重新指定输入输出的流
 *
 *     练习:
 *         从键盘输入字符串,要求将读取到的整行字符串转成大写输出。然后继续
 *         进行输入操作,直至当输入“e”或者“exit”时,退出程序。
 *         
 * @description:  
 * @author ----千里之行,始于足下----
 * @date 2022/9/16 20:25
 */
public class FileTest2 {

    public static void main(String[] args) {
        BufferedReader br = null;


        try {
            InputStreamReader isr = new InputStreamReader(System.in);
            br = new BufferedReader(isr);
            while (true) {
                System.out.println("请输入字字符串");
                String data = null;
                data = br.readLine();
                if ("e".equalsIgnoreCase(data) || "exit".equalsIgnoreCase(data)) {
                    System.out.println("程序结束");
                    break;
                }
                String upperCase = data.toUpperCase();
                System.out.println(upperCase);
            }
        }catch(IOException e){
                e.printStackTrace();
            }finally{
                if (br != null) {
                    try {
                        br.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

老板大气,I am happy

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值