Java中IO流的知识点总结

整体概述

系统中分为临时储存和硬盘两大块
临时储存:当前正在运行的程序提供资源
硬盘:文件中的资源
IO流就是在这两者之间进行操作的

IO流分为字节流和字符流

  1. 字节流:InputStream,OutputStream
  2. 字符流:Reader, Writer

字节流

一切皆字节

字节输出流OutputStream

把临时存储的东西存到硬盘上(文件中)

常用方法

void writer();
void flash();
void close();

其中输出字节流子类中最常用的就是FileOutputStream
写数据的时候会把97转化为二进制数据,然后软件把二进制文件解码成a;

//一次写一个字节
public void write(byte b);
//一次写多个字节
public void write(byte[]  bytes);
public void write(byte[]  bytes, int  offset, int len);

附加: 字符串怎么转化为字节数组

byte[]  bytes = "HelloWorld".getBytes();

数据的追加,续写

//构造方法
FileOutputStream(String pathname, boolean append);
FileOutputStream(File file, boolean append);
字节输入流InputSream

共有的方法

int read()// 返回值是字符的编码值
int read(byte[]  bytes)// 返回值是数组的长度,bytes是读取的数组
void close()

构造方法

FileInputStream(FIle  file);
FileInputStream(String name);

一般的读取工作是这样的

		FileInputStream fis = new FileInputStream("D:\\Java\\javaExmaple1\\src\\practice\\IOStream\\a.txt");
        int len = 0;
        while((len = fis.read()) != -1)
        {
            System.out.println((char) len);
        }
         fis.close(); 

附加:String类的构造方法

String(byte[]  bytes);
//比如
String s = new String(bytes);

先关闭写的流,再关闭读的流

字符流

分为字符输入流和字符输出流
Reader: 常用 FileReader
Writer: 常用FileWriter

字符输入流Reader

通用的方法

int read();
int read(char[]  cbuf);
void close();

接下来介绍FileReader
FileReader extends InputStreamReader

构造方法

FileReader(String pathname);
FileReader(File file);

附加:
String构造方法

String(char[]  chars);
String (byte[]  bytes);
字符输出流Writer

公用的方法
(可以直接写如字符串)

void write(char[]  cbuf);
void write(char[]  cbuf, int offset, int len);
void write(String  str);
void write(String str, int offset, int len);
void flush();//把缓冲流中的数据刷新到临时存储中去
void close();

FileWriter extends OutputStreamWriter

构造方法

FileWriter(File file, boolean append);
FileWriter(String pathname,bollean append);

附加:异常处理

try{
	//可能会产生异常的代码
}catch(异常类变量   变量名)
{
	//异常处理逻辑
}finally{
	//一定会执行的代码,一般是资源释放
}

JDK7新特性

try(定义流对象,之后会自动释放,就不需要finally中间用分号){
	//可能会产生异常的代码
}catch(异常类变量   变量名)
{
	//异常处理逻辑
}

JDK9新特性

A a = new A();
B b = new B();
//这边也是自动释放
try(a;b){
	//可能会产生异常的代码
}catch(异常类变量   变量名)
{
	//异常处理逻辑
}

Properties属性集

java.util.Properties extends Hashtable<K,V>
实现了map类的方法

有两个特有方法

void store(OutputStream out, String comments)//后面的那个是注解的意思
void store(Writer writer,String comments);//写入把properties实现类的对象的内容写入writer了

void load(InputStream in);//读出把in中的数据读出到properties实现类的对象中
void load(Reader reader);

还有一些作为hasetable的子类的特有方法,k,v都是字符串

prop.setProperty("lwt","173");//设置,存入键值对,相当于put

Set<String> set = prop.stringPropertyNames();//  得到键的集合 ,通过键获取值

String value = prop.getProperty(key);//通过键获取值

具体实现代码
(哈希表的遍历不能忘)

public class Demo10Property {
    public static void main(String[] args) throws IOException {
    show03();
    }

    private static void show02() throws IOException {
        Properties prop = new Properties();
        prop.setProperty("lwt","173");//设置,存入键值对,相当于put
        prop.setProperty("ljy","187");
        prop.setProperty("zth","184");

        FileWriter fw = new FileWriter("D:\\Java\\javaExmaple1\\src\\practice\\IOStream\\prop.txt");

        prop.store(fw,"save data");

        fw.close();
    }

    public static void show01()
    {
//        Properties继承了HashTable
//        有三个方法
        Properties prop = new Properties();
        prop.setProperty("lwt","173");//设置,存入键值对,相当于put
        prop.setProperty("ljy","187");
        prop.setProperty("zth","184");

//        得到键的集合 ,通过键获取值
        Set<String> set = prop.stringPropertyNames();

        for (String key : set) {
//            通过键获取值
            String value = prop.getProperty(key);
            System.out.println(key + "=" + value);
        }
    }
    public static void show03() throws IOException {
        Properties prop = new Properties();

        prop.load(new FileReader("D:\\Java\\javaExmaple1\\src\\practice\\IOStream\\prop.txt"));
        Set<String> set = prop.stringPropertyNames();
        for (String key : set) {
            String value = prop.getProperty(key);
            System.out.println(key + "=" + value);
        }
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值