java文件读写

这篇博客详细介绍了Java中的流操作,包括一维单方向流的概念,强调了读写不能并行,以System.out.println()为例说明输出流。讨论了InputStream和OutputStream的基本方法,如read()和write()。接着讲解了文件流FileInputStream和FileOutputStream,并指出所有read和write函数都是按字节处理。过滤器流用于处理更复杂的数据类型,如Reader和Writer用于处理Unicode字符。还提到了编码问题,如遇到乱码时如何设置正确的编码格式。最后,博客引用了翁恺老师在中国大学MOOC的Java语言进阶课程作为参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.流:一维单方向

  1. 一维:即只需要给出一个参数就可以确定在流中的位置

  2. 单方向:只能从一个方向流向另一个方向:要么是读,要么是写,不能在同一个流中读写并行。

那么想要既读又写,就需要开两个流。

例如:System.out.println()中的out就是一个可以用来做输出的流。

  1. InputStream:从inputstream中按字节为单位读取,标记,作为返回值等。

1)int read() 、返回独到的文件的位置,若读到了末尾,返回-1;

read(byte[], int off, int len)、

read(byte b[])

2)int available()

3)mark()、reset()…

注:所有的read函数都是按照字节为单位进行读入的。

  1. OutoutStream:

int write()

write(byte[])

write(byte[], int off, int len)

write的性质和read类似

二.文件流:FileInputStream and FileOutputStream

但凡是read或是write函数都是只能按字节为单位进行读取

FileOutputStream out = new FileOutputStream(filepath);
out.write(something);
out.close();

三.过滤器流:

  1. 如果想要从文件中读取一个int, 或是String 或是其他, 而不只是byte的二进制数据,那么就要用到过滤器流

  2. 在已有的文件流的基础上一层层的增加过滤器,我们可以利用这些过滤器实现那些我们可能需要的功能.

//通过DateOutputStream可以实现完成基础数据类型的写操作
//再将其存入到一层缓冲区流中
//最后通过文件流实现输出
DateOutputStream out = new DataOutputStream(
                       new BufferedOutputStream(
                       new FileOptputStream(filepath)));
int i = 0x666666;
out.writeInt(i);
out.close();
//同理,我们可以实现一个基础数据类型的读入流:
//其实现原理正好为输出流的反向过程
DataInputStream in = new DataInputStream(
                     new BufferedInputStream(
                     new FileOptputStream(filepath)));
int j = in.readInt();
System.out.println(j);
  1. 文本输入输出:Reader and Writer(处理unicode 字符)
//我们使用writer实现文本的输出
//通过一个BufferedWriter实现了一个缓冲区(可有可无)
//OutputStreamWriter是Stream和Writer之间的桥梁,帮助了我们实现了文本到二进制的转换
//最后基于一个实际的文件输出流FileOutputStream,实现写功能
PrintWriter pw = new PrintWriter(
                 new BufferedWriter(
                 new OutputStreamWriter(
                 new FileOutputStream("try.txt"))));            
String txt = "Hello World!";
pw.println(txt);
pw.close();
//文本读出
//原理类似,过程相反
BufferedReader in = new BufferedReader(
                    new InputStreamReader(
                    new FileInputStream(filepath)));
//
String line;
while((line = in.readLine()) != null)
    System.out.println(line);

四.编码问题:

  1. 当从文件中读入数据并输出后,发现全是乱码,那么说明你读入的格式有问题。

  2. 默认情况下,函数是以GB(国标码)形式读入的。

  3. 这种情况下我们需要更改读入的编码格式:

InputStreamReader()中可以有两个参数,第一个参数:具体的数据读入流, 第二个参数:以字符串的形式生命数据读入类型

五.总结:

以上参考自中国大学mooc, 翁恺老师的java语言进阶

图片来自于中国大学mooc, 翁恺老师的java语言进阶
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值