第八周周记

IO流

存储和读取数据的解决方案

分类

IO流的分类
纯文本文件(txt ,md)
注意:Window自带的记事本能读懂的文件
word excul

File类

1.对象的创建。
2.常用方法(具体可以参考API文档)
在这里插入图片描述
3.遍历目录下的文件

    public void fileList(File contents) {
        File[] files = contents.listFiles();
        for (File file : files) {
            System.out.println(file);
            if (file.isDirectory()) {//检查子文件夹是否为目录
                fileList(file);
            }
        }

    }

字节输出流的细节

1.创建字节输出流的对象
细节1:参数是字符串表述的路径或者是File对象都是可以的
细节2:如果文件不存在就会创建一个新的文件,但是要保证父级的路径存在
细节3:如果文件有内容则会将文件的数据清除
2.写数据
write 方法的参数是整数数字对应的是字符
3.释放资源
在每次用完流之后,释放资源

字节输出流写数据的3种方式

在这里插入图片描述

字节输出流写数据的两个错误

换行写:
再次写一个换行符
Windows:\r\n
java中写\r,\n其中一个都行
续写:
创建对象时将第二个参数设为true

字节输入流的细节

1.创建字节输入流的对象(文件中不能写中文)
细节1:如果文件不存在直接报错(不会新建)
2.读数据
read 方法返回的参数是一个整数
读到末尾read返回-1;
3.释放资源
在每次用完流之后,释放资源

字节输入流的循环读取

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

public class Main1 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream(".idea//a.txt");
int b;
while ((b=fis.read())!=-1){
    System.out.print((char)b);
}

        fis.close();
    }
}

文件的复制

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

public class Main1 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream(".idea//a.txt");
        FileOutputStream fos=new FileOutputStream(".idea//b.txt");
        int b;
        while((b=fis.read())!=-1){
            fos.write(b);
        }
        fis.close();
        fos.close();
    }

}

字符集
Unicode 字符集的UTF-8编码格式
一个英文占一个字节,二进制第一位是0转成十进制是正数
一个中文站三个字节,二进制的第一位是1,第一个字节转换为十进制是负数

字符流

在这里插入图片描述

字符输入流细节

1.创建字符输入流的对象
2.read数据
read方法默认是一个字节一个字节读的遇到中文后一次读取多个数据
len对参数进行强转
3.释放资源
在每次用完流之后,释放资源

字符输出流细节

1.创建字符输出流的对象
细节1:参数是字符串表述的路径或者是File对象都是可以的
细节2:如果文件不存在就会创建一个新的文件,但是要保证父级的路径存在
细节3:如果文件有内容则会将文件的数据清除
2.写数据
write 方法的参数是整数数字对应的是字符
3.释放资源
在每次用完流之后,释放资源

字节流,字符流的使用场景

在这里插入图片描述

拷贝文件夹

if else if
判断文件,拷贝
判断文件夹 递归

import java.io.*;

public class Main1 {
    public static void main(String[] args) throws IOException {
        
    }
    public static void copydir(File src,File dest) throws IOException {
        dest.mkdirs();
        File []files=src.listFiles();
        for (File file:files){
            if(file.isFile()){
                FileInputStream fis=new FileInputStream(file);
                FileOutputStream fos=new FileOutputStream(new File(dest,file.getName()));
                byte [] bytes=new byte[1024];
                int len;
                while((len= fis.read(bytes))!=-1){
                    fos.write(bytes,0,len);
                }
                fos.close();
                fis.close();
            }else {
                copydir(file,new File(dest,file.getName()));//递归
            }
        }
    }

}

文件加密(类似与拷贝)

用到的知识点是异或

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

public class Test2 {

    public static void main(String[] args) throws IOException {
        /*^异或
        两边相同flase 0
        两边不同为true 1

    对同一个数字异或两次还是本身
        * */
        FileInputStream fis=new FileInputStream(".idea\\a.txt");
        FileOutputStream fos=new FileOutputStream(".idea\\a.txt");
        int b;
        while((b=fis.read())!=-1){
            fos.write(b^2);
        }
        fos.close();
        fis.close();
    }
}

IO流体系

在这里插入图片描述

字节缓冲流

import java.io.*;

public class Main3 {
    public static void main(String[] args) throws IOException {
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream(".idea\\a.txt"));
        BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(".idea\\b.txt"));
        int b;
        while((b= bis.read())!=-1){
            bos.write(b);
        }
        bos.close();
        bis.close();
    }
}

字符缓冲流

特有的特点
1.输入流中readLine()
2.输出流中的newLine()

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class Main4 {
    public static void main(String[] args) throws IOException {
        BufferedWriter bw=new BufferedWriter(new FileWriter("c.txt"));
        bw.write("嘴角上扬");
        bw.newLine();
        bw.write(" ");
        bw.newLine();
        bw.close();
    }
}

缓冲流自带长度为8192的缓冲区

转换流

是字符流和字节流的桥梁

import sun.nio.cs.ext.GBK;

import java.io.*;
import java.nio.charset.Charset;

public class Main4 {
    public static void main(String[] args) throws IOException {
    //创建对象
        InputStreamReader isr = new InputStreamReader(new FileInputStream(".idea\\a.txt"),"GBK");
        int ch;
        while((ch= isr.read())!=-1){
            System.out.println((char)ch);
        }
        isr.close();
    }
}

序列化流

import sun.nio.cs.ext.GBK;

import java.io.*;
import java.nio.charset.Charset;

class Student implements Serializable{//标记型接口
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
public class Main4 {
    public static void main(String[] args) throws IOException {
        //创建对象
        Student stu=new Student("张三",23);
        //创建序列化流的对象/对象操作输出流
        ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(".idea\\a.txt"));
        oos.writeObject(stu);
        oos.close();

    }
}

反序列化流

import java.io.*;

public class Main5 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
//创建反序化流的对象
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(".idea//a.txt"));
        Object o=(Student)ois.readObject();
        System.out.println(o);
        ois.close();
    }
}

打印流

分类:打印流一般是指PrintStream,printWriter两个类
特点1:打印流只能操作文件目的地,不能操作数据源
特定2:特有的写出方法,可以实现,数据的原样写出
特点3:打印时自动换行

字节打印流

import java.io.*;

public class Main5 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //创建字节打印流对象
        PrintStream ps=new PrintStream(new FileOutputStream(".idea//a.txt"));
        ps.println(97);//不会删除之前的内容
        ps.print("无敌了孩子");
        ps.close();
    }
}

字符打印流

import java.io.*;

public class Main5 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
       //字符流底层有缓冲区,想要自动刷新需要开启
        //创建字符打印流的对象
        PrintWriter pw=new PrintWriter(new FileWriter(".idea//a.txt"),true);
        pw.println(23);
        pw.println("fwewaf");

    }
}

打印流的应用场景

获取打印流的对象,此打印流在虚拟机启动的时候,有虚拟机创建,默认指向控制台
//特殊的打印流,系统中的标准输出流,是不能关闭的,在系统中是唯一的。
调用println时自动换行自动刷新

解压缩流(读)输入流

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class Main {
    public static void main(String[] args) {
        //创建一个·File表示解压的压缩包
        File src=new File("D:\\test.zip");
        //创建一个File表示解压的目的地
        File dest=new File("D:\\");

    }
    public static void outZip(File src,File dest) throws IOException {
        //
        ZipInputStream zip=new ZipInputStream(new FileInputStream(src));
        ZipEntry entry;
        while((entry=zip.getNextEntry())!=null){
            System.out.println(entry);
            //文件夹:需要在目的地dest创建一个同样的文件夹
            if(entry.isDirectory()){
                File file=new File(dest,entry.toString());
                file.mkdirs();
            }
            else {
                FileOutputStream fos=new FileOutputStream(new File(dest,entry.toString()));
                int b;
                while((b=zip.read())!=-1){
                    fos.write(b);
                }
                fos.close();
                zip.closeEntry();
            }
        }
        zip.close();
    }

}

压缩流(写)输出流

单个文件

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

//TIP 要<b>运行</b>代码,请按 <shortcut actionId="Run"/> 或
// 点击间距中的 <icon src="AllIcons.Actions.Execute"/> 图标。
public class Main {
    public static void main(String[] args) throws IOException {
        File src = new File("D:\\test.txt");
        File dest = new File("D:\\");
        toZip(src,dest);

    }
    public static void toZip(File src,File dest) throws IOException {
        ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(new File(dest,"test.zip")));
        ZipEntry entry=new ZipEntry("a.txt");
        zos.putNextEntry(entry);
        FileInputStream fis=new FileInputStream(src);
        int b;
        while((b=fis.read())!=-1){
            zos.write(b);
        }        zos.closeEntry();
zos.close();

    }
}

压缩文件夹

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class Main {
    public static void main(String[] args) throws IOException {
        //创建一个·File表示压缩
        File src=new File("D:\\test.zip");
        File destParent=src.getParentFile();
        File dest =new File(destParent,src.getName()+".zip");
        ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(dest));
Zip(src,zos,src.getName());
        zos.close();


    }
    public static void Zip(File src,ZipOutputStream zos,String name) throws IOException {
File [] files=src.listFiles();
for(File file:files){
    if (file.isFile()){
        ZipEntry entry=new ZipEntry(name+"\\"+file.getName());
        zos.putNextEntry(entry);
        FileInputStream fis=new FileInputStream(file);
        int b;
        while((b= fis.read())!=-1){
            zos.write(b);
        }
        fis.close();
        zos.close();

    }else {
        Zip(file,zos,name+"\\"+file.getName());

    }
}
    }

}

第八周总结

第八周总结

今周主要学习了Io流对文件的一系列处理,我是先看课本,在看网上的视频,自我感觉此次的效率非常的高,自己熟悉课本,知道这节的重要内容,在看视频学习博主的思路过程,收获很多,此外在视频中学到了在课本上未提及的压缩流,解压流,感觉收获很多,图形化界面也看完了,下一阶段主要学习数据库的相关内容,学完数据库,开始坐飞机大战的游戏

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值