JAVA笔记 | IO流的一些简单使用

目录

文件的读取

FileInputStream文件读取

文件读取流的创建

常用操作

FileOutputStream文件输出

文件输出流的创建

常用操作

InputStream与OutputStream例子

文件复制

文本输出至浏览器

FileReader读取字符文件


IO流用于网络(设备间)传输图片,视频等,分字符流,字节流

字节流

传输二进制字节,通常用于传输图片,视频,文件

通常以InputStream/OutputStream结尾:FileInputStream/BufferedInputStream/FileOutputStream/BufferedOutputStream等

字符流

一个字符约占n个字节(不同编码情况下不同),用于读取文本文字

通常以Reader/Writer结尾:

InputStreamReader/OutputStreamReaderFileReader/FileWriter等

文件的读取

FileInputStream文件读取

文件读取流的创建

(1)通过文件路径创建

InputStream is = new FileInputStream("D:\\test");

(2)通过文件对象创建

File file = new File("D:\\test");
InputStream is = new FileInputStream(file);

常用操作

read(int i)  从InputStream流中读取i个字节数据,返回一个整数值,当已读取到末尾,返回-1表示结束

read(byte[] i) 从流中读取i.length长度的字节数据,并存入i中,返回读取的字节数,如果到达文件末尾,返回-1

available() 返回一个整数值,表示下一次调用的方法不受阻塞地从此输入流读取的字节数

close() 关闭文件读取流并释放资源

FileOutputStream文件输出

文件输出流用于创建一个文件并向新文件写入数据,如果新文件不存在会先创建新文件

文件输出流的创建

其中test文件为内容输入的对象

(1)通过文件路径创建

OutputStream f = new FileOutputStream("D:\\test")

(2)通过文件对象创建

File file = new File("D:\\test");
OutputStream is = new FileOutputStream(file);

常用操作

write(int i) 将指定字节写到输出流

write(byte[] i) 将指定数组以i.length长度的字节写到输出流

close() 关闭流

InputStream与OutputStream例子

创建一个txt文件文件写入文字,再读取输出至控制台

public class Test2 {
    public static void main(String[] args) throws IOException {
        String[] data = {"HELLO","WORLD","你好世界"};
        OutputStream os = new FileOutputStream("D:\\test\\test.txt");
        for (int i = 0 ; i < data.length ; i++ ){
            os.write(data[i].getBytes());
        }
        os.close();
        InputStream is = new FileInputStream("D:\\test\\test.txt");
        for (int i = 0 ; i < is.available() ; i++){
            System.out.print((char)is.read());
        }
        is.close();
    }
}

如果报文件拒绝访问,检查文件路径是否指定到具体文件,而不是目录

但这样写会出现乱码,解决方式如下

对于文字的输入输出,借助字节流转字符流设置编码,解决乱码问题

public class Test2 {
    public static void main(String[] args) throws IOException {
        String[] data = {"HELLO","WORLD","你好世界"};
        FileOutputStream os = new FileOutputStream("D:\\test\\test.txt");

        OutputStreamWriter writer = new OutputStreamWriter(os,"UTF-8");
        for (int i = 0 ; i < data.length ; i++ ){
            writer.append(data[i]);
        }
        writer.close();
        os.close();
        InputStream is = new FileInputStream("D:\\test\\test.txt");

        InputStreamReader reader = new InputStreamReader(is,"UTF-8");
        StringBuffer sb = new StringBuffer();
        while(reader.ready()){
            sb.append((char)reader.read());
        }
        System.out.print(sb.toString());
        reader.close();
        is.close();
    }
}

文件复制

public class Test2 {
    public static void main(String[] args) throws IOException {
        InputStream in = null;
        OutputStream out = null;
        in = new FileInputStream(new File("D:\\\\test\\\\test.txt"));
        out = new FileOutputStream(new File("D:\\\\test\\\\test2.txt"));
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = in.read(buffer)) > -1) {
            out.write(buffer, 0, len);
        }
        in.close();
        out.close();
    }
}

文本输出至浏览器

@RestController
@RequestMapping("/test")
public class TestTextController {

    @GetMapping("/get")
    public void getText(HttpServletResponse response) throws IOException {
        //数据源
        String data = "你好世界";
        //将数据源转为字节码数组 指定编码转换
        byte[] dataBytes = data.getBytes("UTF-8");
        //设置响应头中的编码为UTF-8,避免浏览器输出中文出现乱码
        response.setHeader("content-type","text/html;charset=UTF-8");
        //获取请求该接口后创建的response对象的输出流
        OutputStream os = response.getOutputStream();
        //将字节码写入输出流,通过流输出至客户端
        os.write(dataBytes);
        //刷新输出流,并强制输出缓冲的字节数据
        os.flush();
        //关闭输出流
        os.close();
    }
}

FileReader读取字符文件

从txt文本文件读取内容并输出

public class Test2 {
    public static void main(String[] args) throws IOException {
        Reader reader = new FileReader( "D:\\test\\test.txt");
        BufferedReader bufferedReader = new BufferedReader(reader);
        StringBuffer buff = new StringBuffer();
        String str  = null ;
        while ((str = bufferedReader.readLine())!=null){
            buff.append(str);
            buff.append("\n");
        }
        bufferedReader.close();
        reader.close();
        System.out.println(buff.toString());
    }
}

FileWriter写入文件

参数二,表示是否输入内容是否追加文件文本后部,true=追加,,false不追加,如果不追加则会覆盖原文本内容

public class Test2 {
    public static void main(String[] args) throws IOException {
        // 参数二,是否追加文件,true=追加
        Writer writer = new FileWriter("D:\\\\test\\\\test.txt",true);
        writer.append("\n你好你好");
        writer.close();
    }
}

(后续补充)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值