Java IO简要介绍

一 、File类

在文章开始之前,我们首先应当了解一下什么是IO,直白来讲,IO即是Input和Output,即输入输出机制。

接下来对文件进行一下大致的说明:
文件可分为文本文件和二进制文件,其中,文本文件由字符序列(ASCII/Unicode)构成,而二进制文件由位序列构成.

因此二者间最大区别即是二进制IO不涉及编码和解码,所以 从效率上来说二进制IO比文本IO效率更高。

说完了区别,我们再将目光转回IO,IO(输入/输出)是程序必须的一部分,程序读取外部的数据(来自磁盘,键盘等数据)使用输入机制;程序写入数据到外部的设备使用输出机制

在Java中使用IO主要是通过java.io这个包下的类和接口,事实上IO是我们需要达到的一个目的,而为了达到这个机制,我们需要另一个机制,称之为流或者数据流。这方面的内容留到第二部分再讲。

我们回到File类,在File类中,我们能够新建、删除、重命名文件/目录,但它只对文件表面进行操作,若要对文件内容进行访问,需要读取和写入,即需要使用到输入输出,即需要用流来达到这个目的。
File类中常用的方法:

  • boolean exists()
  • boolean isFile()
  • boolean isDirectory()
  • boolean isHidden()
  • boolean delete()
  • boolean createNewFile()
  • file.mkdir()
  • file.getName()
  • file.getAbsoultePath()
  • file.list()
  • 代码实现:
 * 
#`public class TestDemo1 {
    public static void main(String[] args) {
        //1、创建两个文件,分别使用相对路径和绝对路径
        File file1 = new File("./a.txt");//给定相对路径
        File file2 = new File("/Users/lvting/tulun/code/gongye1324/b.txt");//给定绝对路径

        //2、检查文件是否存在,不存在则创建该文件
        if(!file1.exists()){
            try {
                file1.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if(!file2.exists()){
            try {
                file2.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //3、单级文件夹
        File file3 = new File("./bbb");
        file3.mkdir();

        //4、多级文件夹
        File file4 = new File("./aaa/ccc/ddd");
        file4.mkdirs();

        //5、删除文件和文件夹
        file1.delete();
        file2.delete();

        file3.delete();
        file4.delete();//不能删除多级文件夹 ???

        //6、获取文件信息,包括文件名、文件大小、文件的绝对路径
        File file = new File("./test.txt");
        if(!file.exists()){
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        System.out.println(file.getName());
        System.out.println(file.length());
        System.out.println(file.getAbsolutePath());

        //7、如何判断一个文件对象是文件还是文件夹
        if(file.isFile()){
            System.out.println("它是文件");
        }else{
            System.out.println("它是文件夹");
        }

        //8、获取一个目录下的所有文件名
        File f = new File("/Users/lvting/tulun/code/gongye1324/src/com/sehigh/");
        String[] strs = f.list();
        for(String s: strs){
            System.out.print(s + " ");
        }
        System.out.println();
    }
}

二、数据流

流的概念:
IO流指的是一组有顺序的,有起点终点的字节数据的集合,是对数据传输的抽象,
流的分类:
1)按照流向:输入流和输出流(InputStream、Reader/OutputStream、witer)
2)按照传输的类型:字符流和字节流 字符流处理字符,字节流指的是以字节为单位读取8bit,对于字节流来说,可以处理任意类型的数据.
3)节点流和处理流:节点流是程序直接连接到实际的数据源,处理流指的是对已存在的进行连接和封装,通过封装后的流实现数据的读写功能。

字符流和字符流的区别“
1)读写单位不同:字节流以字节为单位、字符流以字符为单位,根据码表映射字符,一次可能读取多个字节
2)处理对象不同:字节流能够处理任意类型的数据,字符流只能纯文本的文件
3)处理效率不同:字节流效率更高,因为可以直接进行操作,而字符流由于涉及到编码解码过程因此比字节流效率要低。
4)可移植性不同:字节流可移植性更高,和平台无关,而字符流需要考虑到平台编码表对于编码和解码过程的影响。

关于字符集编码的代码实现:

public class TestDemo3 {
    public static void main(String[] args) {
        //得到系统默认的编码格式
        Charset charset = Charset.defaultCharset();
        System.out.println(charset);

        //当前系统支持的所有的编码方式
        SortedMap<String, Charset> sortedMap = Charset.availableCharsets();
        Iterator<Map.Entry<String, Charset>> itr = sortedMap.entrySet().iterator();

        while(itr.hasNext()){
            Map.Entry<String, Charset> next = itr.next();
            System.out.println(next.getKey()+ ":  "+next.getValue());
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值