当前位置:网站首页 > Java基础 > 正文

分析java中的io流基础



主要内容

1. IO体系

2. File类

3. FileInputStream和FileOutputStream

4. FileReader和FileWriter

5. BufferedInputStream和BufferedOutputStream

6. BufferedReader和BufferedWriter

7. DataInputStream和DataOutputStream

8. ObjectInputStream和ObjectOutputStream

9. 序列化和反序列化

10. 其他流

11. 复制文件夹

一、IO流概述

1.1 IO流概述 Input Output Stream

在Java程序中,对于数据的输入/输出操作以“流” (stream) 方式进行;Java提供了各种各样的“流”类,用以获取不同种类的数据;程序中通过标准的方法输入或输出数据。Java的流类型一般位于java.io包中。

 

数据源data source,提供原始数据的原始媒介。常见的:数据库、文件、其他程序、内存、网络连接、IO设备。

 

 

流是一个抽象、动态的概念,是一连串连续动态的数据集合。

数据源就像水箱,流就像水管中流着的水流,程序就是我们最终的用户。 流是一个抽象、动态的概念,是一连串连续动态的数据集合。 

 

1.2 IO流分类

按流的方向分类:

q 输入流:数据流向是数据源到程序(以InputStream、Reader结尾的流)。

q 输出流:数据流向是程序到目的地(以OutPutStream、Writer结尾的流)。

 

 

菜鸟雷区

输入/输出流的划分是相对程序而言的,并不是相对数据源。

 

按处理的数据单元分类

q 字节流:以字节为单位获取数据,命名上以Stream结尾的流一般是字节流,顶级类InputStream、OutputStream。

q 字符流:以字符为单位获取数据,命名上以Reader/Writer结尾的流一般是字符流,顶级类Reader、Writer。

 

按处理对象不同分类:

q 节点流:可以直接从数据源或目的地读写数据,如FileInputStream、FileReader等。

q 处理流:不直接连接到数据源或目的地,是”处理流的流”。通过对其他流的处理提高程序的性能,如BufferedInputStream、BufferedReader等。处理流也叫包装流。

节点流处于IO操作的第一线,所有操作必须通过它们进行;处理流可以对节点流进行包装,提高性能或提高程序的灵活性。

生活案例:节点流就好比水井、水库,处理流就好比自来水厂、水塔等,目的是为了过滤和方便。但是如果没有水井、水库,只有自来水厂和水塔肯定不行。

 

1.3 IO流体系结构

字节流

l InputStream和OutputStream是Java语言中最基本的两个字节输入输出类。其他所有字节输入输出流类都继承自这两个基类。

l 这两个类都是抽象类,不能创建它们的实例,只能使用它们的子类.

l FilterInputStream和FilterOutputStream是所有包装流的父类

 

 

 

分析java中的io流基础 

Reader和Writer

l Java语言中最基本的两个字符输入输出类。

l 其他所有字符输入输出流类都继承自这两个基类。

l 这两个类都是抽象类,不能创建它们的实例,只能使用它们的子类.

 

 

 

1.4 File类的使用

File类用来代表文件和文件夹。主要作用有两个:获取文件或者文件夹的属性; 实现对文件、文件夹的创建和删除。 文件夹:file folder  目录:directory

【示例1】使用File获取文件或文件夹属性

public class TestFile1 {
    public static void main(String[] args) {
        //1.创建一个File对象,指向一个文件或者文件夹
        //File file = new File("c:\bjsxt\readme.txt");
        //File file = new File("c:/bjsxt/readme.txt");
        //File file = new File("readme.txt");
        File file = new File("c:/");
        //2.使用这个File对象,获取文件或者文件夹的属性
        System.out.println(file.getName());//文件或者文件夹的名称
        System.out.println(file.length());//长度
        System.out.println(file.exists());//是否存在
        System.out.println(file.getPath());//
        System.out.println(file.getAbsolutePath());//绝对路径
        System.out.println(file.isDirectory());//判断file是否指向一个目录
        System.out.println(file.isFile());//判断file是否指向一个文件

        System.out.println(file.isHidden());
        System.out.println(file.canWrite());
        System.out.println(file.canRead());
        System.out.println(file.canExecute());

       //String [] fileNameArr =  file.list();
        //某个文件夹下有哪些子文件夹和文件
        System.out.println("============");
       File fileArr[] =  file.listFiles();
       for(File f :fileArr){
           //System.out.println(f.toString());
          System.out.print(new Date(f.lastModified()).toLocaleString());
           if(f.isFile()){
               System.out.print("      "+f.length()+" ");
           }else{
               System.out.print("  <DIR>           ");
           }
           System.out.println(f.getName());
       }
    }
}

 

【示例2】使用File类新建、删除文件和文件夹

public class TestFile2 {
    public static void main(String[] args) {
        //创建一个File对象
        //File file = new File("c:/bjsxt/readme.txt");
        File file = new File("c:/bjsxt/abc/cba/acb/bac/readme.txt");
        //如果文件存在就删除,如果不存在就创建
        if(file.exists()){
            file.delete();
        }else{
            try {
                //判断所在文件夹是否存在,不存在,要先创建文件夹
                File dir = file.getParentFile();
                if(!dir.exists()){
                    //dir.mkdir();//make directory
                    dir.mkdirs();
                }
                //创建文件
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 

注意

q File不仅可以指向一个文件,也可以指向一个文件夹(作为一个文件对待)

q File不能对文件的内容进行操作,需要借助IO流实现

本节作业

1. 流有哪些不同的分类。

2. 流的体系结构

3. 使用File类获取文件和文件夹的属性

4. 使用File类新建删除文件和文件夹

  • 上一篇: java大专基础
  • 下一篇: 无基础java大数据
  • 版权声明


    相关文章:

  • java大专基础2024-10-16 12:58:05
  • java基础入门阅读2024-10-16 12:58:05
  • java零基础学习hadoop2024-10-16 12:58:05
  • java基础进阶与线程2024-10-16 12:58:05
  • java本地接口调用基础篇2024-10-16 12:58:05
  • 无基础java大数据2024-10-16 12:58:05
  • java包装类与基础类型的区别2024-10-16 12:58:05
  • java数据库基础实验报告2024-10-16 12:58:05
  • 美团java笔试基础题2024-10-16 12:58:05
  • java开发基础教程乔波2024-10-16 12:58:05