Java高级学习-IO(1)

IO

input—硬盘—output

流:数据(字符,字节)1字符=2字节 1字节=8bit 二进制

字节流

字节输出流OutputStream:是表示字节输出流的所有类的超类

public abstract class OutputStream //抽象方法不能直接调用

成员方法:

close:关闭输出流,释放相关系统资源

flush:刷新输出流,强制任何缓冲的输出字节被写出

write(byte[] b):将b.length字节写入到此输出流

write(byte[] b, int off, int len):写入len字节,从偏移量off开始

abstract void write(int b):写入一个字节

FileOutputStream

FileOutputStream extends OutputStream 文件字节输出流

构造方法:

FileOutputStream (String name):创建一个指定名称的文件中写入数据的文件输出流,name文件路径。

FileOutputStream (File file):创建一个指定File对象表示的文件中写入数据的文件输出流。file文件。

FileOutputStream 会根据构造方法中传递的文件/文件路径,创建一个空的文件。

写入原理

java程序—>JVM—>OS—>OS调用写数据方法—>写入数据

步骤
  1. 创建FileOutputStream 对象,在构造方法中写入数据目的地
  2. 使用FileOutputStream 的write,写入
  3. 释放资源–close

write(byte[] b):一次写入多个字节,第一个字节是正数,查询ASCII表。

第一个字节是负数,第一个字节和第二个字节,组成一个中文显示,查询默认码表(GBK)。

UTF-8,三个字节组成一个中文显示。

写入字符串方法:使用byte[ ] getBytes() 将字符串转换为字节数组–“xx”.getBytes()

数据追加写

使用重载:

FileOutputStream (String name, boolean append)

FileOutputStream (File file, boolean append)

boolean append:追加写开关,true:创建对象不覆盖源文件,默认false

写换行:win:\r\n linux:/n mac:/r

InputStream

字节输入流InputStream:是表示字节输入流的所有类的超类

int read():从输入流中读取数据的下一个字节

int read(byte[ ] b):从输入流中读取数据的一些字节,存储到缓冲区数组b中

void close

FileInputStream

构造方法: FileInputStream (String name) FileInputStream (File file)

步骤:创建一个FileInputStream对象,构造中绑定要读取的数据源,read读取,close释放资源

char(byte b),String(byte[ ] b),String(byte[ ] b, int offset, int length),将字节转换为字符

int read(byte[ ] b):一次读取多个,每一个读取会覆盖之前的数组b的数值,如果当前读取长度小于数值b长度,则数值b剩余的部分还是上传读取的数值。

字符流

字节流中文读取有误。

Reader

字符输入流:abstract Reader

成员方法:int read() int read(char[ ] cbuf)

FileReader

FileReader extends InputStreamReader extends Reader

FileReader 文件字符输入流:把文件数据以字符的方式读取到内存中

构造方法:FileReader (String fileName) FileReader (File file)

fileName路径,file文件,构造方法将FileReader对象指向要读取的文件

Writer

write(int c):写入单个字符

write(char[] cbuf):写入字符数组

abstract write(char[] cbuf, int off, int len):写入len字节,从偏移量off开始

void write(String str):写入字符串

void write(String str, int off, int len):写入字符串一部分

flush:刷新输出流的缓冲

close:关闭输出流,先要刷新

FileWriter

FileWriter extends InputStreamWriter extends Writer

文件字符输出流

构造方法:FileWriter (String fileName) FileWriter (File file)

字符输出流步骤:

创建一个FileInputStream对象,构造中绑定要读取的数据源

使用write( ),将数据写入到内存缓冲区中(字符转换为字节的过程)

使用flush,把内存缓存区中的数据,刷新到文件中。并且流对象可以继续使用。

close释放资源(也会刷新缓冲区)。

数据追加写

FileWriter (String fileName , boolean append) FileWriter (File file , boolean append)

与字节流一致

处理异常 try catch finally

如果使用 try (定义流对象) 则finally可以不用写,直接关闭流对象

直接关闭流对象:try (流对象名称) :A a = new A(); try(a){ }catch( ){ }

属性集

Properties extends Hashtable<k,v> implements Map<k,v>

Properties 类表示了一个持久属性集,Properties 可保存在流中或者从流中加载

Properties 集合是唯一一个和IO流相结合的集合

使用Properties集合中的方法store,把集合中的临时数据,持久化写入到硬盘存储

使用Properties集合中的方法load,把硬盘存储文件(键值对),读取到集合中

属性列表中的每一个键及其对应值都是一个字符串。Properties集合是一个双列集合,key和value默认是字符串。

Properties集合操作字符串
  • Object setProperty(String key, String value ) 调用Hashtable的方法put()。

  • Object getProperty(String key ) 通过key找到value,相当Map集合的方法get()。

  • Set stringPropertyNames( ) 返回此属性列表的键值,键对应值是字符串,相当Map集合的keyset方法。

    Properties   prop = new  Properties  ();
    prop .setProperty("xx","xx");
    Set<String> set = prop.stringPropertyNames( );
    for (String kay:set){
    	String value = prop.getProperty(key);
    }
    
方法
store

void store( OutputStream out, String comments )

void store( Writer writer, String comments )

OutputStream out 字节输出流,Writer writer 字符输出流 FileWriter

String comments 注释,解释保存的文件作用,使用Unicode编码,一般使用""空字符串

FileWriter fw  = new FileWriter ("XX");
prop.store(fw, "XXX");
fw.close();
load

viod load( InputStream inStream)

InputStream inStream 字节输入流,不能读取含有中文的键值对

void load(Reader reader)

Reader reader 字符输入流 FileReader

注意:

存储键值对的文件中,键与值默认的连接符合可以使用= ,空格等待

存储键值对的文件中,可以使用#进行注释,并且不会被读取

存储键值对的文件中,键与值默认都是字符串,不用加引号

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值