文件文件流(File、FileInputStream、FileOutputStream、FileWriter、FileReader)

文件流IO流详细介绍,参考博客:https://www.cnblogs.com/fwnboke/p/8529492.html

https://www.cnblogs.com/shuaiguoguo/p/8883862.html

文档,文件夹,目录  = java文件 

来自java.io.File

URL:统一资源定位符

URI:统一资源标识符

     // 创建文件对象
        // pathname 文件的绝对路径
        // CTRL+2,L 自动补全
        File file = new File("D:/test.txt"); // 这个文件还在内存中在本地是存在.

        // 判断文件是否存在
        System.out.println(file.exists());
        // 判断是否为文件
        System.out.println(file.isFile());
        // 判断是否为目录
        System.out.println(file.isDirectory());

        try {
            if (!file.exists()) {
                // 调用创建文件的方法
                boolean flag = file.createNewFile();
                System.out.println(flag ? "成功" : "失败");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
      //创建目录及文件的方法
     File file = new File("D:/a/b/c/d/a.bat");
        // 判断创建文件的目录是存在
        String dir = file.getParent();
        File dirFile = new File(dir);
        if (!dirFile.exists()) {
            // 创建目录使用是mkdir方法
            //dirFile.mkdir(); // 创建一级目录
            dirFile.mkdirs(); //  创建多级目录
        }
        // 创建这个文件
        try {
            boolean flag = file.createNewFile();
            System.out.println(flag ? "创建成功" : "创建失败");
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 文件属性
        System.out.println("最后修改时间:"+new Date(file.lastModified()));
        System.out.println("文件路径:"+file.getAbsolutePath());
        System.out.println("文件名称:"+file.getName());
        System.out.println("文件的大小:"+file.length());
        System.out.println("是否可读:"+file.canRead());
        System.out.println("是否可写:"+file.canWrite());
        System.out.println("是否隐藏:"+file.isHidden());
        
        // 删除文件(文档才能直接删除,文件夹必须为空才能删除)
        file.delete();

 

/**
     * 列出某个目录下面的文件
     */
    private static void listDirFiles() {
        File dir = new File("C:/Windows");
        // 获取c盘根目录下面所有文件名称组成数组
        /*String[] list = dir.list();
        for (String path : list) {
            System.out.println(path);
        }*/
        System.out.println("--------------------");
        // 获取C判断根目录下面所有文件
        File[] listFiles = dir.listFiles();
        for (File file : listFiles) {
            System.out.println(file.getAbsolutePath());
        }
    }
/**
     * 递归方法遍历一个目录下面所有文件
     */
    private static void listDirAllFiles(String path) {
        File dir = new File(path);
        // 获取到path根目录下面所有文件
        File[] files = dir.listFiles();
        
        if (files != null  && files.length > 0) {
            for (File file :  files) {
                // 判断如果当前遍历这个是一个目录,直接继续查找该目录下面所有文件
                if (file.isDirectory()) {
                    // System.out.println(file.getAbsolutePath());
                    // 递归查找该目录下面所有文件
                    listDirAllFiles(file.getAbsolutePath());
                } else {
                    // 直接输出文件的路径
                    System.out.println(file.getAbsolutePath());
                }
            }
        }
    }

 

 

@Test // 测试字节输出流写入文件内容
    public void testOutStream() {
        // 创建一个文件
        File file = new File("D:/a/b/c/d","out.txt");
        try {
            // 只要目录存在,即使文件不存在,文件流会自动创建这个文件
            FileOutputStream fos = new FileOutputStream(file);
            // 使用write方法把内存中内容写入到文件
            fos.write("我爱我的家".getBytes());
            // 关闭流
            fos.flush();
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    @Test // 测试字节输出流写入文件内容
    public void testInputStream() {
        // 创建一个文件
        File file = new File("D:/a/b/c/d","out.txt");
        
        try {
            // 创建文件输入流
            FileInputStream fis = new FileInputStream(file);
            // 读取文件中的内容
            System.out.println("可用字节数:"+fis.available());

            // 定义读取内容缓冲区
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer, 0, buffer.length);
            
            // 把字节数组转换为一个字符串
            String content = new String(buffer);
            System.out.println(content);
            
            // 关闭流
            fis.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

 

public void testFileWriter() {
        try {
            // 创建字符输出流, 追加写入的内容
            FileWriter writer = new FileWriter("D:\\a\\b\\c\\d\\out.txt", true);
            // 操作流
            writer.write("|我是字符流");
            
            // 关闭流
            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    @Test
    public void testFileReader() {
        try {
            File file = new File("D:\\a\\b\\c\\d\\out.txt");
            // 创建字符输入流
            FileReader reader = new FileReader(file);
            // 操作流
            char[] cbuf = new char[(int) file.length()];
            reader.read(cbuf, 0, cbuf.length);
            
            String content = new String(cbuf);
            System.out.println(content.trim());
            
            // 关闭流
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 

/**
     * 拷贝大文件的方法
     * @param srcFile 源文件
     * @param desFile 目标文件
     */
    private static void copyBigFile(String srcFile, String destFile) {
        
        try {
            // 创建文件输入流
            FileInputStream in = new FileInputStream(srcFile);
            // 创建文件输出流
            FileOutputStream out = new FileOutputStream(destFile);
            // 定义读取内容的缓存区
            byte[] buffer = new byte[1024];
            // 定义记录长度的变量
            int len = 0;
            
            while((len = in.read(buffer)) != -1) {
                System.out.println(len);
                // 把循环读取到缓冲区中数据写入到目标文件中
                out.write(buffer, 0, len);
            }
            
            // 关闭流(谁最后使用就先关闭谁)
            out.flush();
            out.close();
            in.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

posted @ 2019-08-02 16:56  不吃沙琪玛  阅读(528)  评论(0编辑  收藏  举报