File和IO流

File和IO流

是用于处理设备之间的数据传输,如读写文件,网络通讯等

输入input:读取外部数据到程序中

输出output:将程序中的数据输出到外部,如磁盘,光盘等储存设备中

IO流的分类:

流向不同:输入流,输出流

处理单位不同:字符流,字节流

角色不同:节点流,处理流

 

 

基础IO流的框架

  • 抽象基类:
    
    InputStream
    
    OutputStream
    
    Reader
    
    writer
    
    4个节点流:
    
    FileInputStream
    
    FileOutputStream
    
    FileReader
    
    Filewriter
    
    4个处理流
    
    BufferedInputStream
    
    BufferedOutputStream
    
    BufferedReader
    
    Bufferedwriter

     

  •  

     

  • FileReader和Filewriter输出文件,读取数据

public class FileTest {
​
    /**
     *读取文件
     * @throws IOException
     */
    @Test
    public void test() throws IOException {
        File file = new File("hello.txt");
        FileReader fileReader = new FileReader(file);
//        int read = fileReader.read();
//        while (read != -1){
//            System.out.print((char) read);
//            read = fileReader.read();
//        }
        char[] arr = new char[6];
        int len;
        while ((len = fileReader.read(arr)) != -1){
            for (int i = 0; i < len; i++) {
                System.out.print(arr[i]);
            }
        }
        fileReader.close();
    }
​
    /**
     * 写出文件
     */
    @Test
    public void test01(){
        FileWriter fileWriter = null;
        try {
            File file = new File("info.txt");
            fileWriter = new FileWriter(file);
            fileWriter.write("ljx");
            fileWriter.write("ljx很帅");
            fileWriter.write("ljx最好");
            fileWriter.write("ljx啦啦啦");
            System.out.println("输出成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if (fileWriter!=null){
                    fileWriter.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
​
    /**
     * 复制文件
     * @throws IOException
     */
    @Test
    public void test02() throws IOException{
        File readFile = new File("hello.txt");
        File writerFile = new File("helloCopy.txt");
        FileReader fileReader = new FileReader(readFile);
        FileWriter fileWriter = new FileWriter(writerFile);
        char[] arr = new char[5];
        int len;
        while((len = fileReader.read(arr)) != -1){
                fileWriter.write(arr,0,len);
        }
        System.out.println("复制成功!");
        fileWriter.close();
        fileReader.close();
    }

 

  • FileInputStream和FileOutputStream

 

 

注意点:

对于字符流,只能来处理一些文本文件,不能用来处理非文本文件

对于字节流,通常用来处理一些非文本文件,如果是文本的复制操作,也可以使用字节流

文本文件:.txt , .java , .c , .cpp , .py等

非文本文件:.doc , .xlc , .jpg , .pdf

缓冲流(处理流的一种):

作用:提升文本读写的效率

 

 

其中,flush就是刷新数据,他在每次循环时,就把数据刷新一次,主动将内存的数据写给到磁盘中

注意,调用close也会刷新数据

其中还有readline,就是读取一行的字符串

@Test
public void test() throws Exception{
    File file = new File("hello.txt");
    File writer = new File("hello_copy.txt");
    BufferedReader bf = new BufferedReader(new FileReader(file));
    BufferedWriter bw = new BufferedWriter(new FileWriter(writer));
    String str;
    while ((str = bf.readLine()) != null ){
        System.out.println(str);
        bw.write(str);
        System.out.println("复制成功");
        bw.newLine();//换行
        bw.flush();//刷新
    }
    bf.close();
    bw.close();
}

 

 

 

序列化:使用的对象流有两个

 

 

实例:

@Test
public void test() throws IOException, ClassNotFoundException {
    /**
     * 序列化过程
     */
    File file = new File("li.txt");
    ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));
    outputStream.writeUTF("想你的夜");
    outputStream.flush();
    outputStream.writeObject("我不想你的");
    outputStream.flush();
    ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(file));
    /**
     * 反序列化过程
     */
    String str = inputStream.readUTF();
    System.out.println(str);
    Object object = inputStream.readObject();
    System.out.println(object);
    inputStream.close();
    outputStream.close();
}

 

 

 

 

 

 

posted @ 2023-03-16 01:53  jessi呀  阅读(28)  评论(0编辑  收藏  举报