JavaSE基础之 IO流

知识点
I --  Input
O --  Output
         * InputStream 输入流
         * OutputStream 输出流
         *
         * 以 流(作为载体) 的方式处理 数据
         *
         * 字节码  主要应用于媒体文件处理 图片 语音 视频...  也可以处理文字 但效率没有字符码效率高
         * 字符码  主要应用于文字的处理
         *
         * File类
         *     创建文件
 * File类
         *   查看API
         *   文件和目录路径名的抽象表示形式。
         *
         * boolean    createNewFile()
         *           当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
         *
         * boolean    delete()
         *           删除此抽象路径名表示的文件或目录。
         *
         * boolean    exists()
         *           测试此抽象路径名表示的文件或目录是否存在。
         *
         * String    getAbsolutePath()
         *           返回此抽象路径名的绝对路径名字符串。 绝对路径
         *
         * String    getName()
         *           返回由此抽象路径名表示的文件或目录的名称。
         *
         * String    getParent()
         *           返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
         *
         * File    getParentFile()
         *           返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。
         *
         * String    getPath()
         *           将此抽象路径名转换为一个路径名字符串。相对路径
         *
         * boolean    isAbsolute()
         *           测试此抽象路径名是否为绝对路径名。
         * boolean    isDirectory()
         *           测试此抽象路径名表示的文件是否是一个目录。
         * boolean    isFile()
         *           测试此抽象路径名表示的文件是否是一个标准文件。
         * boolean    isHidden()
         *           测试此抽象路径名指定的文件是否是一个隐藏文件。
         *
         * String[] list()
         *           返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
         *
         * boolean    mkdir()
         *           创建此抽象路径名指定的目录。
         * boolean    mkdirs()
         *           创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
         *
         */

public class FileTest {
    public static void main(String[] args) {
                createFile();
        //deleteFile("/Users/dllo/Desktop/homeWork");
    }

    private static void createFile() {

        //在桌面上创建一个文件夹
        //创建文件夹 参数是路径
        File file1 = new File("/Users/dllo/Desktop/luke_file");

        //判断文件或文件夹是否存在 若不存在 返回false   !false --->true
        if (!file1.exists()) {
            file1.mkdir();
        }

        //创建多个文件夹 嵌套关系
        File file2 = new File("/Users/dllo/Desktop/luke_file2/ada/asd/dd");
        if (!file2.exists()) {
            file2.mkdirs();
        }


        //创建文件
        File file3 = new File("/Users/dllo/Desktop/luke_file/ppp.png");
        if (!file3.exists()) {
            try {
                file3.createNewFile(); //文件生成 createNewFile()
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        //快速创建
        //若想用这种方式创建文件 那么必须保证路径的正确(必须有该文件夹)
        //java 推荐使用
        File file4 = new File("/Users/dllo/Desktop/luke_file/", "aaa.txt");
        try {
            file4.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }

        /**
         * 打印各个文件的相对路径和绝对路径
         *
         *  删除文件
         */

        /**
         * 绝对路径 是最具体的路径
         * 相对路径 是相对工程而言的
         */

        System.out.println(file1.getAbsolutePath());
        System.out.println(file1.getPath());
//        System.out.println(file2.getAbsolutePath());
//        System.out.println(file2.getPath());
//        System.out.println(file3.getAbsolutePath());
//        System.out.println(file3.getPath());

        File file5 = new File("luke/小说.txt"); // 工程下创建文件  相对路径
        System.out.println(file5.getPath());  //相对路径
        System.out.println(file5.getAbsolutePath());
    }

    private static void deleteFile(String path) {

        /**
         * 根据路径删除文件,文件夹
         */
        File file = new File(path);
        if (!file.exists()){
            System.out.println("该文件不存在");

            //直接结束此方法
            return;
        }
        //判断要删除的东西是否为文件 若是 则直接删除
        if (file.isFile()){
        file.delete();
        }

        //判断要删的东西是否为文件夹
        if (file.isDirectory()){

            //获取文件夹里的所有内容 注意是File[] 集合
            File[] files = file.listFiles();

            for (File file1 : files) {
                //递归删除
                deleteFile(file1.getAbsolutePath());
            }
            file.delete();
        }
    }
}

*工程下创建文件


*读写  IO
* 按类型分
         *    字节流 字符流
         *
         * 按方向分
         *    输入流 输出流

public class Main {
    public static void main(String[] args) {
        /**
         * 需求:
         *    1.读取某一文件里的内容
         *    2.将某一字符串写成一个文件
         *    3.读取一个文件里面的内容并且复制到另一个文件中
         *
         */
        read("/Users/dllo/Desktop/地址");
        write("luke/aaa");
    }

    private static void write(String outPath) {
        File file = new File(outPath);
        try {
            //创建输出流
            FileOutputStream fos = new FileOutputStream(file);

            System.out.println("请输入要输出的内容");
            //创建一个字符串
            String str = new Scanner(System.in).next();

            //将字符串转化成字节数组 再进行写操作
            fos.write(str.getBytes());

            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private static void read(String path) {

        //获取要读的文件
        File file =new File(path);

        //创建输入流
        try {
            FileInputStream fis = new FileInputStream(file);
            byte[] bytes = new byte[1024];

            //记录每次读取数据的长度,(位置)
            int length = 0 ;
            String result = "";
            while ((length = fis.read(bytes))!= -1){

                //参数1 要拼接的数组   参数2 起始位置  参数3 结束位置
                String str = new String(bytes,0,length);
                result += str;
                System.out.println(result);
            }
            //最后一定要!!!! 关流
            // 先入后出  先创建的后关 后创建的先关
            fis.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 


       

posted on 2018-07-19 22:25  楓与楪  阅读(138)  评论(0编辑  收藏  举报

导航