java之字节流,字符流,转换流

1.使用字节的输入流和输出流来进行复制
字节流不但可以写文本还可以写图片,音频

public static void main(String[] args){
    FileInputStream f = new FileInputStream("/Users/lanou/Desktop/test/11.png");
    FileInputStream f2 = new FileInputStream("/Users/lanou/Desktop/test/112233.png");
    byte[] b = new byte[1024;]
    int len = 0;
    while((len = f1.read(b))!= -1){
        f2.write(b,0,len)
    }
    f1.close();
    f2.close();
}

首先绑定两个文件
然后用数组的方式读写
最后关闭数据流


需求:将一个文件夹复制到另一个文件夹
参数 原文件夹 filestart
     要被添加的文件夹 File fileend
//复制文件夹的方法
public static void fun(File filestart,File  fileend) throws IOException {
        File newfile = new File(filestart, fileend.getName());
        newfile.mkdir();
        File[] listFiles = filestart.listFiles();
        for (File subfile : listFiles) {
            if(subfile.isFile()) {
                FileInputStream fileInputStream = new FileInputStream(subfile);
                File file3 = new File(newfile, subfile.getName());
                FileOutputStream fileOutputStream  =new FileOutputStream(file3);
                int len = 0;
                byte[] b =new byte[1024];
                while((len = fileInputStream.read(b))!=-1) {
                    fileOutputStream.write(b, 0, len);
                }
            }else {
                fun(subfile, newfile);
            }
        }
    }


字符流
也是一个字符一个字符的读
和字节流的区别就是字符流只能操作文本,不能写图片,音频。
write是所有字符输出流的父类,并且是抽象类
FileWriter
 构造方法
  1.文件
  2.字符串

字符流的写入

public static void main(String[] args) throws IOException {
        FileWriter fileWriter = new FileWriter("/Users/lanou/Desktop/Xtest/haha.txt");
        fileWriter.write(100);
        //字符输出流在写入文件的时候需要调用刷新功能
        //建议每次写入最好都刷新一次
        fileWriter.flush();
        char[] c = {'l','w','s','d'};
        fileWriter.write(c);
        fileWriter.flush();
        fileWriter.write(c, 1, 2);
        //使用字符串直接写入
        fileWriter.write("床前明月光\n疑是地上霜\n");
        fileWriter.flush();
        fileWriter.write("白日依山尽", 2, 3);
        fileWriter.flush();
        //关闭资源前会刷新
       fileWriter.close();
    }

/*
 * 字符输入流
 * Reader (所有字符输入流的父类,抽象类)
 * fileReader
 * 写的时候能直接写入字符串
 * 读的时候不能 因为字符串很难界定
 */

public static void main(String[] args) throws IOException {
        FileReader fileReader = new FileReader("/Users/lanou/Desktop/Xtest/haha.txt");
        char[] c = new char[1024];
        int len = 0;
        while ((len = fileReader.read(c)) != -1) {
            System.out.println(new String(c, 0, len));
        }
    }

转换流
OutputStreamWriter 
可以根据不同的编码形式写入 需要使用到FIleOutputStream 类

 inputStreamReader(字节流转向字符流)
 可以读取不同编码格式文件
 需要使用到FIleInputStream 类

 利用转换流写文件 默认方式查UTF-8
    public static void getUTF8() throws IOException {
        // 创建 转换流 字符流转向字节流
        FileOutputStream fos = new FileOutputStream("/Users/lanou/Desktop/Xtest/utf8.txt");
        OutputStreamWriter osw = new OutputStreamWriter(fos);
        // 写文件
        osw.write("丁鹏");
        // 关闭资源
        // 只关闭外层的流就可以了
        osw.close();

    }

使用GBK编码来写入文件
    private static void getGBK() throws IOException {
        FileOutputStream f = new FileOutputStream("/Users/lanou/Desktop/Xtest/GBK.txt");
        OutputStreamWriter o = new OutputStreamWriter(f, "gbk");// 这里忽略大小写
        o.write("丁鹏");
        o.close();
    }
以utf- 8读取
    private static void readUtf() throws IOException {
        FileInputStream fInputStream = new FileInputStream("/Users/lanou/Desktop/Xtest/utf8.txt");
        InputStreamReader i = new InputStreamReader(fInputStream);
        char[] c =new char[1024];
        int len = 0;
        while((len = i.read(c))!= -1) {
            System.out.println(new String(c, 0, len));
        }
        i.close();
    }
    以gbk读取
    private static void readgbk() throws IOException {
        FileInputStream fInputStream = new FileInputStream("/Users/lanou/Desktop/Xtest/utf8.txt");
        InputStreamReader i = new InputStreamReader(fInputStream,"gbk");
        char[] c =new char[1024];
        int len = 0;
        while((len = i.read(c))!= -1) {
            System.out.println(new String(c, 0, len));
        }
        i.close();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值