IO流总结

InputStream :字节输入流

 read():一个字节一个字节的读,每次读出一个字节 
       InputStream inputStream = new FileInputStream("test1.txt")) 
       num = inputStream.read();---System.out.println((char)num);
read(数组):一次可以读出多个字节,数组的作用:每次会将读出的字节临时放到这个数组中
     (InputStream inputStream = new FileInputStream("test1.txt")
      while ((num=inputStream.read(arr)) != -1)
一次读取全部字节
	 (InputStream inputStream = new FileInputStream("test1.txt")
      int num = inputStream.available();
      byte[] bytes = new byte[num]; inputStream.read(bytes); 
      System.out.println(new String(bytes));

OutputStream :字节输出流

OutputStream outputStream = new FileOutputStream("test1.txt") 
文件的写:String message = "你好,师姐";
		outputStream.write(message.getBytes());
		outputStream.flush();

Reader :字符输入流

try (Reader reader = new FileReader("file\\src")) { 
    // 1. 实例化一个字符数组
    char[] array = new char[100]; 
    // 2. 声明一个变量,用来记录每次读取到了多少个数据 
    int length = 0; 
    // 3. 循环读取数据 
    while ((length = reader.read(array)) != -1) {
        String str = new String(array, 0, length); 
        System.out.print(str); 
    }
}

Writer :字符输出流

try (Writer writer = new FileWriter("file\\\target", true--写入不覆盖,接着写入)) { 
    // 2. 将数据写入到输出流中 
    writer.write("hello, world"); 
    // 3. 冲刷缓冲区 
    writer.flush();
}

常见的缓冲流:

BufferedInputStream: 缓冲字节输入流

(BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("file\\source")))
	try (BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("file\\source"))) { 
        // 1. 实例化一个字节数组 
        byte[] array = new byte[1024]; 
        // 2. 声明一个整型变量,用来记录每次读取了多少个字节数据 
        nt length = 0; 
        // 3. 循环读取
        while ((length = bufferedInputStream.read(array)) != -1) { 
            // 4. 将读取到的数据转成字符串输出到控制台 
            String msg = new String(array, 0, length);
            System.out.println(msg); 
        }
    }

BufferedOutputStream: 缓冲字节输出流

try (BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("file\\source"))) { 
    // 1. 实例化一个字节数组 
    byte[] array = new byte[1024];
    // 2. 声明一个整型变量,用来记录每次读取了多少个字节数据 
    int length = 0; 
    // 3. 循环读取
    while ((length = bufferedInputStream.read(array)) != -1) { 
        // 4. 将读取到的数据转成字符串输出到控制台 
        String msg = new String(array, 0, length); 
        System.out.println(msg); 
    }
}

BufferedReader: 缓冲字符输入流

(BufferedReader bufferedReader = new BufferedReader(new FileReader("file\\src")))
	String line = ""; 
	// 2. 循环读取数据 
	while ((line = reader.readLine()) != null) {
    	// 3. 将读取到的数据输出
    	System.out.println(line);
BufferedReader 类中多了一个方法 readLine()
 readLine() 是逐行读取, 但是, 只能读取到一行中的内容, 并不能读取走换行符。 可以逐行读取。 一直到读取到的数据是nul
LineNumberReader:

​ 是BufffferedReader的子类,不能读.但是可以提高效率,特有功能:设置行号,获取行号

LineNumberReader lineNumberReader = new LineNumberReader(new FileReader("src\\test\\Demo1.java")); 
	//设置行号,默认从0开始,从1开始打印 
	lineNumberReader.setLineNumber(10); 
	String data = null; 
	while ((data = lineNumberReader.readLine()) != null) { 	
        System.out.print(lineNumberReader.getLineNumber());
			//获取行号 
             System.out.print(data); 
             System.out.println(); 
              }
		lineNumberReader.close(); }

BufferedWriter: 缓冲字符输出流

try (BufferedReader reader = new BufferedReader(new FileReader("file\\src")); 	BufferedWriter writer = new BufferedWriter(new FileWriter("file\\destination"))) {
    String line = ""; 
    while ((line = reader.readLine()) != null) {
		writer.write(line); 
        writer.newLine(); 
    }
    writer.flush(); 
}
BufferedWriter 类中多了一个方法 newLine()
	bufferedWriter.write("hello world");
    bufferedWriter.newLine();

装饰设计模式

MyBufferedReader myBufferedReader = new MyBufferedReader(new FileReader("src\\test\\Demo1.java"));

class MyBufferedReader extends Reader{}

Scanner

标准的输入流
//创建了标准输入流并关联了键盘(默认的) 
//InputStream inputStream = System.in;


try (BufferedInputStream bis = new BufferedInputStream(System.in)) {
    byte[] array = new byte[128]; 
    int length = 0; 
    while ((length = bis.read(array)) != -1) {
        String str = new String(array, 0, length); 
        System.out.println(str); 
    } 
}
标准的输出流
//PrintStream original = System.out;

 // PrintStream: 是一个打印流,可以将数据输出到指定位置。 
try (PrintStream ps = new PrintStream(new FileOutputStream("file\\logs", true))) {
	// ps.println("hello world!"); 
	// 重定向标准输出流 
	System.setOut(ps); 
    System.out.println("123"); 
}catch (IOException e) { 
	e.printStackTrace(); 
} finally {
	System.setOut(original); 
}
System.out.println("你好");

转换流

转换流输入流:
private static void read() { 
// 当前的项目是 utf-8, 读取的文件是 GBK
// 如果需要以指定的字符集进行文件的读取,需要使用 I
//InputStreamReader(InputStream inputStream, String charsetName)
try (InputStreamReader reader = new InputStreamReader(new FileInputStream("file\\src"), "GBK")) {
	char[] array = new char[128]; 
	int length = 0;
    while ((length = reader.read(array)) != -1) { 
    	System.out.println(new String(array, 0, length)); 
    	} 
    } catch (IOException e) { 
    	e.printStackTrace(); 
    } 
}

转换输出流:
private static void write() { 
// 以指定的字符集写数据 
try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("file\\dst", true), "GBK")) {
    writer.write("hello world");
    writer.write("你好,世界"); 
} catch (IOException e) { 
    e.printStackTrace();
} 
}

打印流

字节打印流:PrintStream
字符打印流:PrintWriter
public static void main(String[] args) throws IOException { 
    PrintWriter pWriter = new PrintWriter(new FileWriter("test5.txt")); 	
    pWriter.write("bingbing"); 
    pWriter.close(); 
}

序列化流

​ 将短期存储的数据实现长期存储,这个过程对应的流就是序列化流

ObjectOutputStream
//创建序列化流 
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("D:\\ideaProgram\\copyDe mo5.java")); //objectOutputStream.writeInt(2); 
	//对对象进行序列化
	p1 = new Person("zhangsan",20);
	objectOutputStream.writeObject(p1); //可序列化类的所有子类型本身都是可序列化的。 		
	//objectOutputStream.writeObject(new GoodPerson("hah",20,20)); 
	//序列化后要及时关闭流 
	objectOutputStream.close();
}
ObjectInputStream
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("D:\\ideaProgram\\copyDem o5.java")); 
	// int num = objectInputStream.readInt(); 
	// System.out.println(num); 
	//反序列化 
	Object o = objectInputStream.readObject();
	System.out.println(o == p1);
	//false 说明反序列化后的对象与原来的对象是 两块儿空间.
	System.out.println(o); 
	//objectInputStream.close(); 
}

Properties

Properties也不是一个IO流, 是一个集合。 是Hashtable的子类。 >

public static void fun3() throws IOException { 
    //读取a.txt的内容到Properties对象里面 
    Properties properties = new Properties(); 
    //利用load方法将内容从磁盘读入Properties对象 
    properties.load(new FileReader("D:\\ideaProgram\\a.txt")); 		
    //System.out.println(properties); 
    //改变内容 
    properties.setProperty("bingbing","buok"); 
    //使用store方法将数据写入磁盘
	properties.store(new FileWriter("D:\\ideaProgram\\a.txt"),"改变了冰冰的值"); 
    //写入控制台---通过list 
    properties.list(System.out); 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值