ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java的IO流——Java学习笔记

2022-01-15 17:59:19  阅读:115  来源: 互联网

标签:Java 字节 read 笔记 write int len IO new


IO

流:

字符流字节流
输入readerInputStream
输出writerOutputStream

字节流

字节输出流

OutPutStream字节输出流

  • write(int):一次写入一个字节

  • write(byte[] b)

    ​ 如果第一个字节是正数(0~127),查询ASCII码表

    ​ 如果第一个字节是负数,第一个自己与第二个字节组成一 个中文显示,查询GBK

    write(byte[],int,int):从数组中从off开始写入,写len个长度

  • close()

FileOutputStream文件字节输出流

构造:

new FileOutPutStream(str);
new FileOutPutStream(file);
new FileOutputStream(file,append);
//true,追加。false,覆盖
//str:文件路径。file:目标文件

换行:\r\n

字:write(“你好”.getByte())

字节输入流

InputStream,所有字节输入流超类

  • read(int)
  • read(byte[])
  • close()
bis = new FileInputStream("b.txt");
len = bis.read(bytes);//返回读入有效个数
System.out.plantln(new String(bytes));

FileInputStream

继承InputStream,文件字节输入流

构造:

new FileInputStream(str);
new FileInputStream(file);
1.创建fis对象 2. 将fis对象指向构造的路径文件

字节流中文乱码问题

由于中文在utf-8中,一个汉字占3个字节,在gbk中,一个汉字占2个字节。字节流读入时,单个字节来读入的。显示是一些数字,将数字转为char型时,就汉字与数字不匹配。造成乱码

a.txt中有 “你好” 两个汉字
fis = new FileInputStream("a.txt");
while((len=fis.read())!=-1){
	System.out.plantln(len);//显示为
	/**
	228
    189
    160
    229
    165
    189
	*/
}
while((len=fis.read())!=-1){
	System.out.plantln((char)len);
	/**
	ä
    ½

    å
    ¥
    ½
	*/
	}

总结

write(int):将int数据写入到文件中

write(byte[]):一次将数组中的数据写入到文件中

write(byte[],off,len):将数组数据写入文件,从off开始,len个长度

read():读一个字节,返回值int就是读的数据。文件为空时,返回-1

read(byte[]):读入一个数组的数据,返回值是读入长度。没有读入时,返回-1。循环读入时,数组数据会被覆盖。

字符流

字符输入流

Reader:抽象类

  • read():一次读取一个字符并返回int。返回-1是读完了
  • read(char[]):一次读取一个char数组,返回有效个数,返回-1是读完了

FileReader

构造:

new FileReader(str)

new FileReader(file)

字符输出流

Writer:抽象类

  • write(int):将数据写入到内存缓冲区
  • write(char[]):一次写入一个char数组
  • write(char[],off,len):一次写入len个,从off开始
  • write(string)
  • flush():将内存中数据刷新到硬盘
  • close()
  • \r\n换行(win)

FileWriter文件字符输出流

new FileWriter(str)

new FileWriter(file)

new FileWriter(file,append);true续写。false覆盖


IO异常处理

try(FileWriter fw = new FileWriter("a.txt")){
	fw = new FileWriter("a.txt");
	fw.write("niaho");
}catch(IOException e){
	xxx;
}
这样定义在try的流对象。会自动关闭,所以不必写

Properties集合

继承于hashtable,是双列集合。唯一一个与IO流结合的集合。可以使用方法store将集合中数据持久化在硬盘中,load方法将硬盘文件读取到集合中。Properties<String,String>

  • setProperty(key,value):存储集合键值

  • getProperty(key):通过键获取值

  • stringPropertyNames():相当于map的keyset方法。获取一个set集合

  • store(流对象,str):将集合内容存入硬盘,str是注释字符串

    ​ 格式一般是“键=值”

  • load(输入流对象):将目标文件数据按键值对读入到集合中

标签:Java,字节,read,笔记,write,int,len,IO,new
来源: https://blog.csdn.net/weixin_49072771/article/details/122513523

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有