day09【IO 字节流、字符流】

主要内容

  • IO流
  • 字节流
  • 字符流
  • 异常处理
  • Properties

1 IO概述

输入流输出流
字节流字节输入流字节输出流
InputStreamOutputStream
字符流字符输入流字符输出流
ReaderWriter

2 字节流

万物皆字节

2.1字节输出流OutputStream

public void close():关闭流释放资源(完成流操作必须使用)
public void flush():刷新流输出字节
public void write(byte[] b):将b.length字节从指定数组输出
public void write(byte[] b,int off,int len):从数组写入len字节,从off开始
public abstract void(int b):指定字节输出流

2.2FileOutputStream类

文件输出流,将数据写出到文件

构造方法:
public FileOutputStream(File file):创建文件输出流写入File对象表示的文件
public FileOutputStream(String name):创建文件输出流以指定的名称写入文件
创建流对象,必须传入文件路径,没有该文件,会创建,有文件,会清空此文件数据
举例:
// 使用File对象创建流对象               
File file = new File("a.txt");         
FileOutputStream fos = new FileOutputStream(file);                
// 使用文件名称创建流对象         
FileOutputStream fos = new FileOutputStream("b.txt"); 
写出字节数据
1.write(int b) 每次写出一个字节
2.write(byte[] b)每次写出数组中的数据
3write(byte[] b, int off, int len).写入指定长度字节数组,从off索引,len个字节
举例
// 使用文件名称创建流对象         
FileOutputStream fos = new FileOutputStream("fos.txt");            
// 写出数据           
fos.write(97); // 写出第1个字节           
fos.write(98); // 写出第2个字节           
fos.write(99); // 写出第3个字节  

//字符串转换为字节数组          
byte[] b = "黑马程序员".getBytes();          
// 写出字节数组数据           
fos.write(b);

// 写出从索引2开始,2个字节。                  
fos.write(b,2,2); 
//关闭资源            
fos.close(); 
数据追加续写
true表示追加数据,false清空原有数据
创建文件输出流写入File对象
public FileOutputStream(File file,boolean append)
创建文件输出流指定的名称写入文件
public FileOutputStream(String name,boolean append)
举例:
// 使用文件名称创建流对象        
FileOutputStream fos = new FileOutputStream("fos.txt"true);             
// 字符串转换为字节数组           
byte[] b = "abcde".getBytes();    
// 写出从索引2开始,2个字节。索引2是c,两个字节,也就是cd。
fos.write(b);        
// 关闭资源            
fos.close(); 
写出换行
  • Windows:\r\n
  • Unix:\n
  • Mac:\r

2.4 字节输入流InputStream

读取字节信息到内存

public void close():关闭流释放资源
public abstract int read() : 从输入流读取数据的下一个字节。
public int read(byte[] b) : 从输入流中读取一些字节数,并存储到字节数组 b中。

2.5 FileInputStream类

文件输入流,从文件中读取字节

构造方法
FileInputStream(File file) :打开file文件的连接创建一个FileInputStream
FileInputStream(String name) : 打开路径名name的连接创建一个FileInputStream 
创建一个流对象时,必须传入一个文件路径。该路径下,如果没有文件,会抛出 FileNotFoundException 。
读取字节数据
read()
每次读取一个字节的数据,提升为int,读取到末尾,返回-1.
read(byte[] b)
每次读取b.length个字节到数组中,返回有效的字节个数,读取到末尾返回-1
举例:
// 使用文件名称创建流对象
FileInputStream fis = new FileInputStream("read.txt");          
// 定义变量,保存数据            
int b ;
// 定义变量,作为有效个数           
int len ; 
// 定义字节数组,作为装字节数据的容器           
byte[] b = new byte[2];         
// 循环读取        
while (( len= fis.read(b))!=1) {             
// 每次读取后,把数组变成字符串打印               
  System.out.println(new String(b));        
}         
// 循环读取         
while ((b = fis.read())!=1) {             
	System.out.println((char)b);         
}
// 关闭资源                 
fis.close(); 

3 字符流

专门用于处理文本文件

3.1字符输入流Reader

public void close() 关闭流释放资源。   
public int read() 从输入流读取一个字符。 
public int read(char[] cbuf) 从输入流中读取一些字符,并将它们存储到字符数组 cbuf

3.2FileReader类

读取字符文件,Windows编码:GBK , IDEA中:UTF-8

构造方法
FileReader(File file) : 创建一个 FileReader ,给定要读取的file对象
FileReader(String fileName) : 创建一个 FileReader ,给定要读取的文件的名
举例:
// 使用File对象创建流对象               
File file = new File("a.txt");         
FileReader fr = new FileReader(file);               
// 使用文件名称创建流对象         
FileReader fr = new FileReader("b.txt"); 
读取字符数组
read方法,
每次读取一个字符的数据,提升为int类型,读取到文件末尾,返回 -1 
read(char[] cbuf) 
每次读取b的长度个字符到数组中,返回读取到的有效字符个数, 读取到末尾返回 -1 

3.3字符输出流Writer

void write(int c) 写入单个字符。 
void write(char[] cbuf) 写入字符数组。 
abstract  void write(char[] cbuf, int off, int len) 写入字符数组的某一部分,off数组的开始索引,len 写的字符个数。 
void write(String str) 写入字符串。 
void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个 数。 
void flush() 刷新该流的缓冲。 
void close() 关闭此流,并刷新它。 ···

3.4FileWriter类

构造方法
FileWriter(File file) : 创建一个FileWriter,给定要读取的File对象。
FileWriter(String fileName) : 创建一个 FileWriter,给定要读取的文件的名称
基本写出数据
write(int b) 方法,
每次可以写出一个字符数据
关闭和刷新
flush :刷新缓冲区,流对象可以继续使用。 
close :先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。
即便是flush方法写出了数据,操作的后还是要调用close方法,释放系统资源。
写出其他数据
write(char[] cbuf)write(char[] cbuf, int off, int len) 
每次可以写出字符数组中的数据,
 write(String str)write(String str, int off, int len) ,
 每次可以写出字符串中的数据
 续写和换行:操作类似于FileOutputStream

4 IO异常的处理

jdk7前处理
 // 声明变量            
 FileWriter fw = null;         
 try {             
 //创建流对象             
 fw = new FileWriter("fw.txt");             
 // 写出数据             
 fw.write("黑马程序员"); 
 //黑马程序员        
  } catch (IOException e) {             
 e.printStackTrace();        
  } finally {             
  try {                 
  if (fw != null) {                    
  fw.close();                
  }             
  } catch (IOException e) {                
   e.printStackTrace();             
}         
} 
Jdk7的处理(了解内容)

try (创建流对象语句,如果多个,使用’;'隔开) {
// 读写数据
} catch (IOException e) {
e.printStackTrace();
}

5 属性集

继承Hashtable表示一个持久的属性集

5.1Properties

构造方法
public Properties() :创建一个空的属性列表。
基本的存储方法
public Object setProperty(String key, String value) : 保存一对属性。
public String getProperty(String key) :使用此属性列表中指定的键搜索属性值。 
public Set<String> stringPropertyNames() :所有键的名称的集合。
与流相关的方法
load方法:把硬盘中的文件(键值对),读取到集合
public void load(InputStream inStream) :
字节输入流,不能读取中文 
public void load(Reader reader)
字符输入流,可以读取中文

注意

  • 存储键值对文件,键与值默认连接符可以使用=,空格(其他字符)
  • 存储键值对文件,可以使用#进行注释,被注释的键值对不会再被读取
  • 存储键值对的文件,默认都是字符串,不用再加引号
store方法:把集合中的临时数据,持久化写入到硬盘
public void store(OutputStream out, String comments)
字节输出流,不能写中文
public void store(Writer writer, String comments)
字符输出流,可以写中文
comments是注释,不能使用中文,默认Unicode编码格式
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值