撰写时间:2019年04月27日
IO流:按照流的流向来分,可以分为输入流和输出流,输出都是从程序运行所在内存
的角度来划分的,是相对的。就比如借钱,我向你借钱,对于你来说是支出(输出),
对于我来说是收入(输入),换过来又不一样的,所有说输入输出是相对的。
输入流:只能读不能写,由InputStream和Reader作为基类
输出流:只能写不能读,由OutputStream和Writer作为基类
InputStream和Reader是所有输入流的抽象基类,它们的方法是所有输入流都可使用
的方法。InputStream操作的数据单元是字节,Reader操作的数据单元是字符。
InputStream写法:
public class InputStreamDemo {
public static void main(String[] args) {
//File file = new File("D:\\z\\BaseDataType.java");
try {// 11:00
// InputStream 抽象基类,抽象不能直接实例,需要用到子类
// 子类文件类:FileInputStream
InputStream in = new FileInputStream("D:\\z\\BaseDataType.java");
//因为utf-8 每个字符=3位 所有尽量给它3的整数倍
byte[] bs = new byte[1026];// 临时存放读取数据
int count = 0;// 记录读取的字节数
while ((count = in.read(bs, 0, bs.length)) != -1) {//读取不到返回-1
System.out.println(new String(bs, 0, count));
}
// 流使用完后一定要关闭
in.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
常用的还是:Reader
public class ReaderDemo {
public static void main(String[] args) {
try {
//Reader抽象基类,抽象不能直接实例,需要用到子类FileReader
Reader reader = new FileReader("D:\\z\\BaseDataType.java");
//char[100]位数给的过大过小都不好根据实际给
char[] cs = new char[100];// 临时存放读取数据
int count = 0;// 记录读取的字节数
//读取不到返回-1
while ((count = reader.read(cs, 0, cs.length)) != -1) { System.out.print(new String(cs, 0, count));
}
// 关闭流
reader.close();
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
路径的分隔符\可以换成/
在Java中支持将/当做与平台无关的分隔符。什么叫与平台无关?就是所有平台用它都
认。
两段代码执行出来的结果都是一样的。InputStream和Reader的方法基本一致,只是
InputStream读取的是字节,使用的参数是byte数组(byte[]),而Reader读取的是
字符,使用的参数是char数组(char[])InputStream和Reader都是抽象类,本身不能
创建实例,但它们分别有一个用于读取文件的输入流:FileInputStream和 FileReader。