Java——基本IO流

序言

最近学习一个项目涉及到了文件操作,那不免用到输入流和输出流了,但自己又很久没使用了,忘的七七八八,等于要重新捡起来。或许是以前也学的不踏实吧,学完后没有认真整理归纳,导致很快就遗忘了,所以我们学习完后一定要找时间把重要的知识整理归纳!


IO流按读取单位类型来分一般分两种:字节流、字符流

1、两者区别就是读取的单位不一样,字节流读取的单位是bit, 字符流是char

2、字节流一般读取字节文件,字符流一般读取文本、字符文件

3、字符流的读取速度比字节流的快

4、形式上区别字节流与字符流的是字节流是Int(Out)Stream, 字符流是Reader(Writer)


一、字节流

1、输入字节流(节点流 —— 直接操作文件)

File file = new File("d:/course.ftl");
//输入字节流
FileInputStream fileInputStream = new FileInputStream(file);
//指定一次读取的文件大小 1次1kb
byte[] b = new byte[1024];
//读取标记数, len = -1时会终止
int len = 0;
while ((len = fileInputStream.read(b))!=-1){
    System.out.println(new String(b, 0, len));
}

new String(b, 0, len) 中

1、 b指的是字节数组,其中包含有读取到的内容

2、0是指从该字节数组中第几个下标开始读起

3、len是指从0开始要读的内容的长度

2、输出字节流(节点流 —— 直接操作文件)

File file = new File("f:/huang.txt");
FileOutputStream fileOutputStream = new FileOutputStream(file);
String s = "你好,世界";
//由于FileOutputStream只能写入字节数据,所以需要将字符串转换成字节数组
byte[] bytes = s.getBytes("utf-8"); 
fileOutputStream.write(bytes);

3、输入字节缓存流(处理流 —— 间接操作文件)
(使用缓存流一次性读取大部分数据到缓存中,减少访问文件次数,提高读的效率)

FileInputStream in = new FileInputStream(srcFile);
BufferedInputStream bis = new BufferedInputStream(in);
用法和字节流普通用法一样

4、输出字节缓存流(处理流 —— 间接操作文件)
(使用输出缓存流,将写的数据首先全部写到缓存区中,然后调用flush()一次性将其写入文件(除非内容大小大于缓存区的大小则会自动刷新缓存写入文件))

FileOutputStream out = new FileOutputStream(destName);
BufferedOutputStream bos = new BufferedOutputStream(out);
用法和字节流普通用法一样
bos.flush();//刷新缓存区,否则可能不写入内容

二、字符流

1、输入字符流(节点流 —— 直接操作文件)

File file = new File("f:/huang.txt");
//输入字符流
FileReader fileReader = new FileReader(file);
//读取标记
int len = -1;
char[] chars = new char[10];
while((len = fileReader.read(chars))!=-1){
	//因为是字符流,所以可以通过强转型将数字变成字符输出,字节流不可以这样做
    //System.out.println(new String((char)len)); 
    System.out.println(new String(chars, 0, len)); 
}

2、输出字符流(节点流 —— 直接操作文件)

File file = new File("f:/huang.txt");
FileWriter fileWriter = new FileWriter(file, true); //true 添加
fileWriter.write("你好,世界");
fileWriter.flush(); //刷新缓存区

3、输入字符缓存流(处理流 —— 间接操作文件)

FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
String line = null;
while((line = br.readLine())!=null){
	System.out.println(line);
}

4、输出字符缓存流(处理流 —— 间接操作文件)

File f = new File("f:test.txt");
FileWriter fw = new FileWriter(f, false);//节点流
BufferedWriter bw = new BufferedWriter(fw); //处理流
PrintWriter pw = new PrintWriter(bw); //处理流
pw.write("你好你好\n");
pw.append("你好\n");
pw.print("你好\n");
pw.write("你好你好\n");
pw.flush();

三、字节流与字符流之间的转换

1、输入字节流转换成输入字符流

FileInputStream in = new FileInputStream(huang.txt);
InputStreamReader isr = new InputStreamReader(in); //中间桥梁
BufferedReader br= new BufferedReader(isr);

2、输出字节流转换成输出字符流

FileOutputStream out = new FileOutputStream(“huang.txt”);
OutputStreamWriter osw  = new OutputStreamWriter(out); //中间桥梁
BufferedWriter bw = new BufferedWriter(osw)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值