java IO流

IO流的分类 

IO流体系

文件字节输入流 

 下面看一段简单代码

每次读一个字节,但这种该方式有问题,比如不能读汉字

package byte_stream;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class test1 {
    public static void main(String[] args) throws Exception {
        //1.创建源文件管道
        FileInputStream is=new FileInputStream("IO\\src\\abab.txt");
        //2.读取文件字节
        int a;
        while((a=is.read())!=-1){
            System.out.println((char)a);
        }
        
        is.close();//每次使用后必须关闭释放系统资源

    }
}

每次读多个字节,但是这种方法也避免不了汉字的读取问题

package byte_stream;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class test2 {
    public static void main(String[] args) throws IOException {
        //1.创建源文件管道
        FileInputStream is=new FileInputStream("IO\\src\\abab.txt");
        //2.读取文件字节,定义一个桶来装字节
        byte[] buffer=new byte[3];
        int len;
        while((len=is.read(buffer))!=-1){
            String s=new String(buffer,0,len);
            System.out.print(s);
        }

        is.close();//每次使用后必须关闭释放系统资源

    }
}

我们还可以一次读取整个文件的字节

package byte_stream;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class test3 {
    public static void main(String[] args) throws Exception {
        //1.创建源文件管道
        FileInputStream is=new FileInputStream("IO\\src\\abab.txt");
        byte[] bytes=is.readAllBytes();
        System.out.println(new String(bytes));

        is.close();//每次使用后必须关闭释放系统资源
    }
}

文件字节输出流

例如:复制文件

package byte_stream;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class CopyTest {
    public static void main(String[] args) throws Exception {
        FileInputStream is=new FileInputStream("IO\\src\\abab.txt");
        FileOutputStream os=new FileOutputStream("IO\\src\\abc.txt");
        byte[] buffer=new byte[1024];
        int len;
        while((len=is.read(buffer))!=-1){
            os.write(buffer,0,len);
        }
        is.close();
        os.close();
        System.out.println("复制完成!");
    }
}
在释放资源上的优化

 

package byte_stream;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyTest2 {
        public static void main(String[] args) throws Exception {
            try ( FileInputStream is=new FileInputStream("IO\\src\\abab.txt");
                  FileOutputStream os=new FileOutputStream("IO\\src\\abc.txt");
                  //括号里面只能放系统资源
                  )
            {
                byte[] buffer=new byte[1024];
                int len;
                while((len=is.read(buffer))!=-1){
                    os.write(buffer,0,len);
                }
                is.close();
                os.close();
                System.out.println("复制完成!");
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
}

文件字符输入流

 

 

package FileReader;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class test {
    public static void main(String[] args) {
        try(FileWriter fileWriter=new FileWriter("IO\\src\\test.txt");) {
            fileWriter.write('a');
            fileWriter.write('b');
            fileWriter.write('c');
            fileWriter.write('d');
            fileWriter.flush();
            fileWriter.write("\n");
            fileWriter.write("hahahahhaha");
            fileWriter.close();//关闭时自动刷新流

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

缓冲流

 字节缓冲流

 字符缓冲流

字符缓冲输入

package BufferIO;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class Test1 {
    public static void main(String[] args) {
        try (
                FileReader fileReader=new FileReader("IO\\src\\test.txt");
                BufferedReader bufferedReader=new BufferedReader(fileReader);
             )
        {
            String line;
            while((line=bufferedReader.readLine())!=null){
                System.out.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
字符缓冲输出

转换流

 

package Code;

import java.io.*;

public class Test1 {
    public static void main(String[] args) {
        try(
                //1.得到文件原始字节流
                FileInputStream fileInputStream=new FileInputStream("IO\\src\\abab.txt");
                //2.把原始字节流按照指定字符集转换为字符输入流
                Reader reader=  new InputStreamReader(fileInputStream,"GBK");
                //3.把字符输入流转换为缓冲字符输入流
                BufferedReader bufferedReader=new BufferedReader(reader);

           )
        {
            String line;
            while((line=bufferedReader.readLine())!=null){
                System.out.println(line);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }


    }
}

 

 打印流

 

打印流的作用

 

package PrintStream;

import java.io.FileNotFoundException;
import java.io.PrintStream;

public class Test1 {
    public static void main(String[] args) {
        try (
                PrintStream ps=new PrintStream("IO\\\\src\\\\test.txt1");

                ){
            System.setOut(ps);
            System.out.println("nihao");
            System.out.println("thank you");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

数据流

 数据输出流

 

package DataStream;

import java.io.*;

public class Test {
    public static void main(String[] args) {
        try(
                FileOutputStream os=new FileOutputStream("IO\\src\\data.txt");
                DataOutputStream dos=new DataOutputStream(os);
                DataInputStream dis=new DataInputStream(new FileInputStream("IO\\src\\data.txt"));
                ) {
            dos.write(97);
            dos.write(98);
            dos.writeBoolean(true);
//读取的时候要按顺序读取
            System.out.println(dis.read());
            System.out.println(dis.read());
            System.out.println(dis.readBoolean());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 序列化流

 

package ObjectStream;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class Test {
    public static void main(String[] args) {
        try(
                ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("IO\\src\\object.txt"));
                )
        {
            User user=new User("zhouxinxin","hh123",18,"1234567");
            oos.writeObject(user);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

package ObjectStream;

import java.io.*;

public class test2 {
    public static void main(String[] args) {
        try(
                ObjectInputStream oos=new ObjectInputStream(new FileInputStream("IO\\src\\object.txt"));
        )
        {

           User user=(User)oos.readObject();
            System.out.println(user);

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

IO框架

  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值