Java:字节流 文件输出与读入方法 并 实现文件拷贝

字节 流

FileOutputStream

  1. 创建对象,指定位置(产生数据传输通道)
    参数可以是File对象,也可以是路径
    如果文件不存在,且父级路径正确,会新建文件
    如果文件存在,会清空文件
  2. 写出数据
    ASCII对应 字符
    可以传入字节流,指定起始位置,长度
  3. 释放资源
    解除资源占用
package com.io.testdemo1;

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

public class test1 {
    public static void 	main(String[] args) throws IOException {

        // 创建对象,指定位置(产生数据传输通道)
        FileOutputStream fos = new FileOutputStream("src/aaa.txt");

        // 写入数据
        fos.write(97);
        byte[] bytes = {97, 98, 99, 100};
        fos.write(bytes);
        fos.write(bytes, 0, 2);

        // 释放资源
        fos.close();
    }
}

在这里插入图片描述

换行 与 续写

换行:
write(“\r\n”) 即可 linux只写\n即可 mac写\r
\r 表示回车 \n 表示换行
早期\r表示,回到此行开头,\n才表示换行,一直沿用了下来。

续写: 在输出流对象的第二个参数中,加入true,表示打开续写开关。

例子:

package com.io.testdemo1;

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

public class test1 {
    public static void main(String[] args) throws IOException {

        FileOutputStream fos = new FileOutputStream("src/aaa.txt", true);

        // 写入数据
        String str1 = "hello";
        byte[] bytes1 = str1.getBytes();
        fos.write(bytes1);

		// 写入换行
        String str2 = "\r\n";
        byte[] bytes2 = str2.getBytes();
        fos.write(bytes2);

        fos.close();
    }
}

运行两次的结果:
在这里插入图片描述

可以发现第二次续写了,并没有清空,同时换行了。

FileInputstream

与输出相似。

  1. 创建对象(搭建桥梁)
    如果文件不存在则直接报错
  2. 读入(返回值为int)
    一次读一个字节,ASCII对应的数字 (每次读相当于一次指针的移动)
    读到末尾时返回-1
  3. 释放资源
package com.io.testdemo2;

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

public class test2 {

    public static void main(String[] args) throws IOException {

		// 创建对象
        FileInputStream fis = new FileInputStream("src/aaa.txt");

		// 循环 读入
        int b; // 用变量去接收,要是条件和循环体内都read会跳两次
        while ((b = fis.read()) != -1) {
            System.out.print((char)b);
        }
		// 释放资源
        fis.close();
    }
}

运行结果与文件内容相同,说明成功读取成功:
在这里插入图片描述
在这里插入图片描述

实现 文件拷贝(字节数组 读入方法)

read可以传入byte数组,这样可以一次读入一个字节数组大小,速度会快很多,大小最好为1024的整数倍。

注意:返回值变成了长度,读完会返回-1。

将aaa.txt拷贝bbb.txt:

package com.io.copydemo;

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

public class test3 {
    public static void main(String[] args) throws IOException {

        FileInputStream fis = new FileInputStream("src/aaa.txt");
        FileOutputStream fos = new FileOutputStream("src/bbb.txt");

        byte[] bytes = new byte[4096];
        int len;
        while ((len = fis.read(bytes)) != -1) {
            fos.write(bytes, 0, len);
        }

        fis.close();
        fos.close();
    }
}

运行结果:
在这里插入图片描述

字节流 编码

最好不要用字节流取读取文本文件。
编码和解码要统一。

idea默认utf-8,字母1字节,汉字3字节
eclipse默认jbk,字母1字节,汉字2字节

package com.io;

import java.io.UnsupportedEncodingException;

public class demo4 {
    public static void main(String[] args) throws UnsupportedEncodingException {

        String str = "abc你好";

        byte[] bytes = str.getBytes("GBK");

        String res1 = new String(bytes, "GBK");
        String res2 = new String(bytes, "UTF-8");

        System.out.println(res1); // abc你好
        System.out.println(res2); // abc���
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cosmoshhhyyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值