一、I/O操作 Input/Output
从数据源中读取数据,以及将数据写入到数据目的地当中。
I/O的流向stream
数据流:在数据源和程序之间建立的数据流跑的管道。
IO的分类
1、输入流、输出流
2、字节流、字符流
3、节点流、处理流
二、字节流类:读写文件时,以字节为基础
输入流:InputStream(抽象类) ->FileInputStream(子类)
int read(byte[] b,int off,int len) //读取数据,读取到的数据放到byte[]比特类型数组中,从byte[]数组的off位开始放数据,读取一次最多读len长度的数据,返回值为一次read方法总共读了多少个字节的数据
输出流: OutputStream(抽象类) -> FileOutputStream(子类)
void write(byte[] b,int off,int len) //写入数据,byte[]表示要往文件写入的数据,从byte[]位开始写入,写len长度的数据
e.g.
导入IO包:import java.io.**;
使用io流会导致编译器异常,需要使用trycatch
//声明输入流的引用
FileInputStream fis = null;
//声明输出流的引用
FileOutputStream fos = null;
try {
//生成代表输入流的对象
fis = new FileInputStream("读取文件地址");
//生成代表输出流的对象
fos = new FileOutputStream("写入文件的地址");
byte [] buffer = new byte[100];
int temp = fis.read(buffer,0, buffer.length);
fos.write(buffer,0,temp);
for(int i=0;i<buffer.length;i++){
System.out.println(buffer[i]); //ASCII码,如果是中文会导致乱码
}
//根据buffer内的字节生成字符,并生成一个字符串
String s = new String(buffer);
//trim()方法会去除收尾的空格和空字符
//例如“ abc def ” 变成 “abc def”
s = s.trim();
System.out.println(s);
} catch (Exception e) {
System.out.println(e);
} finally {
//关闭IO流
try{
fis.close();
fos.close();
}catch(Exception e){
System.out.println(e);
}
}
三、大文件字节流读写操作
byte [] buffer = new buffer [1024];//定义一个长度为1024字节的数组
while (true){
//当读取数据完了之后,read方法返回值为-1
int temp = fis.read(buffer,0,buffer.length);
if(temp == -1) {
break;
}
fos.write(buffer,0,temp);
} finally {
//关闭IO流
try{
fis.close();
fos.close();
}catch(Exception e){
System.out.println(e);
}
}
四、字符流:读写文件时,以字符为基础
字符输入流:Reader ->FileReader
int read(char[] c, int off, int len)
字符输出流:Writer -> FileWriter
void write(char[] c, int off, int len)
e.g.
FileReader fr = null;
FileWriter fw = null;
try {
fr = new FileReader("读取文件地址");
fw = new FileWriter("写入文件的地址");
char [] buffer = new byte[100];
int temp = fr.read(buffer,0, buffer.length);
fw.write(buffer,0,temp);
for(int i=0;i<buffer.length;i++){
System.out.println(buffer[i]); //打印字符
}
System.out.println(s);
} catch (Exception e) {
System.out.println(e);
} finally {
//关闭IO流
try{
fr.close();
fw.close();
}catch(Exception e){
System.out.println(e);
}
}
五、节点流和处理流
BufferedReader:字符输入处理流
readLine() //一次读取一行的数据
FileReader fileReader = null;
BufferedReader bufferedReader = null;
try {
fileReader = new FileReader("读取文件地址");
bufferedReader = new BufferedReader(fileReader);
String line = null;
while(true){
line = bufferedReader.readLine();
if(line == null){
break;
}
System.out.println(line);
}
} catch (Exception e) {
System.out.println(e);
} finally {
//关闭IO流
try{
fileReader.close();
bufferedReader.close();
}catch(Exception e){
System.out.println(e);
}
}
六、泛型
https://blog.csdn.net/sunxianghuang/article/details/51982979