文件传输——JavaIO流

本文详细介绍了Java中的IO流,包括File类的使用、RandomAccessFile、字节流与字符流的各类实现及其缓冲操作,以及对象的序列化和反序列化。重点讲解了字节流的FileInputStream、BufferedInputStream和DataInputStream,字符流的FileReader、BufferedReader,以及如何处理文件编码和提高IO性能。

前言

  近期发现自己IO流掌握的不够熟练,遂跟着慕课的一套课花了半天时间系统练了一遍手。整理笔记和代码如下,也参杂了自己的理解。课程链接
  代码按照章节上传到了我的GitHUb上:
在这里插入图片描述
脑图概览(简要):
在这里插入图片描述

注:每章内容前都有本章的脑图,方便复习,也可根据需要查看内容。

第1章 文件的编码

在这里插入图片描述
  文本文件就是字节序列,可以是任意编码的字节序列
  所以一切从文件的编码说起。

utf-8 中文3个字节 英文1字节
gbk 中文2个字节 英文1字节
utf-16be 中文2个字节 英文2字节

程序验证:

        String s = "家铭ABC";

        //项目默认utf-8,中文占用3个字节
        byte[] bytes1 = s.getBytes("utf-8");
        for (byte b : bytes1) {
   
   
            //把字节(转换成了int)以16进制的方式显示
            System.out.print(Integer.toHexString(b & 0xff) + " ");
        }
        System.out.println();

        //gbk编码中文占用2个字节,英文占用1个字节
        byte[] gbkBytes = s.getBytes("gbk");
        for (byte gbkByte : gbkBytes) {
   
   
            System.out.print(Integer.toHexString(gbkByte & 0xff) + " ");
        }
        System.out.println();

        //java是双字节编码 utf-16be
        byte[] javaBytes = s.getBytes("utf-16be");
        //utf-16be 中文占用2个字节,英文占用2个字节
        for (byte javaByte : javaBytes) {
   
   
            System.out.print(Integer.toHexString(javaByte & 0xff) + " ");
        }
        System.out.println();

输出结果如下:
在这里插入图片描述
  当你的字节序列是某种编码时,这个时候想把字节序列变成字符串。 也需要用这种编码方式,否则会出现乱码。

第2章 File类的使用

在这里插入图片描述

2-1 File类常用API介绍

  File类只用于表示文件(目录)的信息(名称、大小等),不能用于文件内容的访问。

创建文件

  • File file = new File("E:\\Jeremy");
      //路径中用双正斜(需要转义)或者单反斜
  • File file2 = new File("E:"+File.separator+"Jeremy");
      // 建议这样使用,∵windows和linux系统通用
  • File file3 = new File("E:"+File.separator+"Jeremy", "日记.txt");

文件操作

  • file.isDirectory();
  • file.exists();
  • file.createNewFile();
  • file.mkdir();
  • file.delete();
  • file.isFile() //是否是一个文件

输出路径

  • System.out.println(file); // file.toString() 的内容
  • file.getAbsoluteFile(); //file绝对路径
  • file.getName(); //file的名字
  • file.getParent(); //file父目录的名字
  • file.getParentFile().getAbsoluteFile(); //file父目录绝对路径

2-2 遍历目录

  • String[] fileNames = dir.list(); //返回的是直接子目录名称的字符串数组
  • File[] files = dir.listFiles(); //返回直接子目录文件的抽象
  • 如果要遍历子目录下的目录就需要构造成File对象做递归操作
	/*
     * 列出指定目录下(包括其子目录)的所有文件
     */
    public static void listDirectory(File dir) throws IOException {
   
   
     	if (!dir.exists()) {
   
   
            throw new IllegalArgumentException("目录:" + dir + "不存在.");
        }
        if (!dir.isDirectory()) {
   
   
            throw 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值