Java IO流--字节流
IO流概述
IO流:输入输出流(Input/Output)
流是一组有顺序、起点、终点的字节集合,是对数据传输的抽象
流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观地进行数据操作
IO流的分类
根据处理的数据类型分为:字符流、字节流
根据数据流向不同分为:输入流、输出流
字节输入流:OutputStream,此抽象类是所有输出字节流的超类
字节输入流:InputStream,此抽象类是所有输入字节流的超类
需要注意的是:
(1)字节是数据传输的基本单位
(2)字节也是文件存储的基本单位
(3)从文件读取数据到程序使用“输入流”
(4)从程序把数据写入文件使用“输出流”
代码示例:
package com.seven.javaSE; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class FIleStreamDemo { public static void main(String[] args) { out(); in(); } //定义文件输出流,向文件中写入数据 public static void out() { File file = new File("C:\\TestFile\\hello.txt"); try { /* * FileOutputStream(File file) * FileOutputStream(File file,Boolean append) 当append==True时,写入的内容追加在文件中 */ OutputStream out = new FileOutputStream(file,true); String content = "藤原豆腐渣渣,好好学Java。"; out.write(content.getBytes()); out.close(); System.out.println("内容写入文件成功"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } //定义文件输出流,从文件读取数据 public static void in() { /* * 在Unicode字符编码下,一个中文字符占2个字节 * 所以下面定义的字节数组content的长度若是单数,如:1、3等 * 后面将字节数组内容转换成字符时会出现乱码,故一般将长度设为双数 * 还应注意的是,sb.append(new String(content))是将整个字节数组的内容都转成字符, * 但是有些时候,存放至字节数组的内容没有超过数组长度,这个时候就出现内容冗余的情况 * 所以加入代码sb.append(new String(content)),每次读多少追加多少 */ byte [] content = new byte[1024]; File f = new File("C:/TestFile/hello.txt"); int len = -1; StringBuffer sb = new StringBuffer(); try { InputStream in = new FileInputStream(f); while((len=in.read(content))!=-1) { sb.append(new String(content,0,len)); }
in.close(); System.out.println(sb); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }