java-17(3)-转换流

1 转换流:

InputStreamReader:字节到字符的桥梁,解码。
OutputStreamWriter:字符到字节的桥梁,编码。

2 流的操作规律:

之所以要弄清楚这个规律,是因为流对象太多,开发时不知道哪个对象合适。
想要知道开发时用到哪个对象,只需四个明确即可。
1.明确源和目的
源:InputStream Reader
目的:OutputStream Writer
2.明确数据是否是纯文本数据。
    源:是纯文本,Reader
        不是;InputStream
    目的:是纯文本;Writer
        不是:OutputStream
    到这里,就可以明确需求中国具体要使用哪个体系。
3.明确具体设备。
源设备:
    硬盘:File
    键盘:System.in
    内存:数组
    网络:Socket流
目的设备:
    硬盘:File
    控制台:System.out
    内存:数组
    网络:Socket流
4.是否需要其他额外功能。
    1,缓冲区,Buffer
    2,转换流,InputStreamReader OutputStreamWriter

3 什么时候使用转换流呢?

1;源或者目的对应的设备是字节流,但是操作的却是文本数据,
可以使用转换作为桥梁,提高效率。
2;一旦操作文本涉及到具体的指定编码表时,必须使用转换流。

File类:

可以将一个已存在的,或者不存在的文件或者目录封装成file对象。
File对象的常见方法。
     * 1.获取。
     *   1.1获取文件名称 file.getName();
     *   1.2文件路径    
     *       file.getAbsolutePath();//绝对路径 
     *       file.getPath();//相对路径
     *   1.3文件大小     file.length();
     *   1.4文件修改时间   file.lastModified();
     *   1.5获取当前文件夹名称(包含隐藏文件)
     *       String[] names = file.list();
     *   1.6获取当前文件夹下文件对象
     *        File[] files = file.listFiles();
     *        File[] files = file.listFiles(new Filter());
     *   可以传递过滤器,对指定的文件进行遍历。
     *   要自定义过滤器 要么实现FilenameFilter,要么实现FileFilter
     *   可以用于目录的遍历包含子目录内容(深度遍历)。
     * 
     * 2.创建与删除
     * file.mkdirs();创建多级目录
     * file.mkdir();创建单级目录
     * file.createNewFile();创建文件
     * file.delete();删除
     * 
     * 3.判断
     * file.exists();
     * file.isDirectory();
     * file.isFile();
     * file.isHidden();
     *
     * 4.重命名
     * file.renameTo(file2);在不同盘符之间重命名相当于剪切。
     * 

深度遍历演示

/*
    * 需求,对指定目录进行所有内容的列出(包含子目录内容)
    * 也可以理解为深度遍历
    * */
    public static void main(String[] args){
        File f = new File("F:\\myjava");
        int level = 0;
        listAll(f,level);
    }

    private static void listAll(File f,int level) {
        System.out.println(getSpace(level)+f.getName());
        File[] files = f.listFiles(new FilterByHidden());

        level++;
        for (File file:files){
            if (file.isDirectory()){
                listAll(file,level);
            }else {
                System.out.println(getSpace(level)+file.getName());
            }
        }
    }

    private static String getSpace(int level) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < level; i++) {
            sb.append("    ");
        }
        return sb.toString();
    }

删除

* 删除一个带内容的目录
*
* 原理:必须从最里面往外删

    public static void main(String[] args){
        File f = new File("F:\\XLSP\\thread");
        removeAll(f);
    }

    private static void removeAll(File f) {
        File[] files = f.listFiles();

        for (File file:files){
            if (file.isDirectory()){
                removeAll(file);
            } else {
                file.delete();
            }
        }
        f.delete();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值