• 第十周课程总结


    IO流的分类

    根据处理数据类型的不同分为:字符流和字节流

    根据数据流向不同分为:输入流和输出流

    字符流和字节流
    字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。字节流和字符流的区别:
    (1)读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
    (2)处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
    (3)字节流在操作的时候本身是不会用到缓冲区的,是文件本身的直接操作的;而字符流在操作的时候下后是会用到缓冲区的,是通过缓冲区来操作文件,我们将在下面验证这一点。
    结论:优先选用字节流。首先因为硬盘上的所有文件都是以字节的形式进行传输或者保存的,包括图片等内容。但是字符只是在内存中才会形成的,所以在开发中,字节流使用广泛。

    输入流和输出流

    对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。

    Java IO流对象
    1. 输入字节流InputStream
    定义和结构说明:
    从输入字节流的继承图可以看出:

    InputStream 是所有的输入字节流的父类,它是一个抽象类。

    ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。PipedInputStream 是从与其它线程共用的管道中读取数据,与Piped 相关的知识后续单独介绍。

    ObjectInputStream 和所有FilterInputStream的子类都是装饰流(装饰器模式的主角)。意思是FileInputStream类可以通过一个String路径名创建一个对象,FileInputStream(String name)。而DataInputStream必须装饰一个类才能返回一个对象,DataInputStream(InputStream in)

    1.使用内存操作流将一个大写字母转化为小写字母

    import java.io.*;
    class hello{
    public static void main(String[] args) throws IOException {
    String str="ROLLENHOLT";
    ByteArrayInputStream input=new ByteArrayInputStream(str.getBytes());
    ByteArrayOutputStream output=new ByteArrayOutputStream();
    int temp=0;
    while((temp=input.read())!=-1){
    char ch=(char)temp;
    output.write(Character.toLowerCase(ch));
    }
    String outStr=output.toString();
    input.close();
    output.close();
    System.out.println(outStr);
    }
    }

    字符流与字节流转换
    转换流的特点:
    (1)其是字符流和字节流之间的桥梁
    (2)可对读取到的字节数据经过指定编码转换成字符
    (3)可对读取到的字符数据经过指定编码转换成字节
    何时使用转换流?
    当字节和字符之间有转换动作时;
    流操作的数据需要编码或解码时。
    具体的对象体现:
    InputStreamReader:字节到字符的桥梁
    OutputStreamWriter:字符到字节的桥梁
    这两个流对象是字符体系中的成员,它们有转换作用,本身又是字符流,所以在构造的时候需要传入字节流对象进来

    1.字节流和字符流转换

    import java.io.*;
    class hello{
    public static void main(String[] args) throws IOException {
    String fileName= "d:"+File.separator+"hello.txt";
    File file=new File(fileName);
    Writer out=new OutputStreamWriter(new FileOutputStream(file));
    out.write("hello");
    out.close();
    }
    }

    2.将字节输入流转换为字符输入流

    import java.io.*;
    class hello{
    public static void main(String[] args) throws IOException {
    String fileName= "d:"+File.separator+"hello.txt";
    File file=new File(fileName);
    Reader read=new InputStreamReader(new FileInputStream(file));
    char[] b=new char[100];
    int len=read.read(b);
    System.out.println(new String(b,0,len));
    read.close();
    }
    }

    File类

    1.创建一个文件

    import java.io.*;
    class hello{
    public static void main(String[] args) {
    File f=new File("D:\hello.txt");
    try{
    f.createNewFile();
    }catch (Exception e) {
    e.printStackTrace();
    }
    }
    }

    2.删除一个文件

    import java.io.*;
    class hello{
    public static void main(String[] args) {
    String fileName="D:"+File.separator+"hello.txt";
    File f=new File(fileName);
    if(f.exists()){
    f.delete();
    }else{
    System.out.println("文件不存在");
    }
    
    }
    }

    3.创建一个文件夹

    import java.io.*;
    class hello{
    public static void main(String[] args) {
    String fileName="D:"+File.separator+"hello";
    File f=new File(fileName);
    f.mkdir();
    }
    }

    4.列出目录下的所有文件

    import java.io.*;
    class hello{
    public static void main(String[] args) {
    String fileName="D:"+File.separator;
    File f=new File(fileName);
    String[] str=f.list();
    for (int i = 0; i < str.length; i++) {
    System.out.println(str[i]);
    }
    }
    }

    注意使用list返回的是String数组,。而且列出的不是完整路径,如果想列出完整路径的话,需要使用listFiles.它返回的是File的数组

    5.列出指定目录的全部文件(包括隐藏文件)

    import java.io.*;
    class hello{
    public static void main(String[] args) {
    String fileName="D:"+File.separator;
    File f=new File(fileName);
    File[] str=f.listFiles();
    for (int i = 0; i < str.length; i++) {
    System.out.println(str[i]);
    }
    }
    }

    6.判断一个指定的路径是否为目录

    import java.io.*;
    class hello{
    public static void main(String[] args) {
    String fileName="D:"+File.separator;
    File f=new File(fileName);
    if(f.isDirectory()){
    System.out.println("YES");
    }else{
    System.out.println("NO");
    }
    }
    }

    7.递归搜索指定目录的全部内容,包括文件和文件夹

    import java.io.*;
    class hello{
    public static void main(String[] args) {
    String fileName="D:"+File.separator;
    File f=new File(fileName);
    print(f);
    }
    public static void print(File f){
    if(f!=null){
    if(f.isDirectory()){
    File[] fileArray=f.listFiles();
    if(fileArray!=null){
    for (int i = 0; i
    ```

    虽然总结的不是很全面,但我感觉自己还是不够熟练,所以把全部自己列举了出来。

    感觉自己对java io 有点模糊,但我会尽力去弥补。

  • 相关阅读:
    c++11之智能指针
    SurfaceFlinger与Surface概述
    android GUI 流程记录
    文章收藏
    android performance
    POJ3349
    java中的volatile和synchronized
    [原创]分期还款的名义利率与真实利率
    Java IO 流总结
    telegram
  • 原文地址:https://www.cnblogs.com/Allen15773771785/p/11777086.html
Copyright © 2020-2023  润新知