JAVA基础IO流
InputStream / Reader :所有输入流的基类,前者是字节输入流,后者是字符输入流。
输入流:只能从中读取数据,而不能向其写入数据。
OutputStream / Writer :所有输出流的基类,前者是字节输出流,后者是字符输出流。
输出流:只能向其写入数据,而不能从中读取数据。
此处的输入、输出是以程序运行所在内存的角度划分的。
如果从硬盘的角度来考虑,二者应该反过来才对。
但是当我们从文件中读取数据时是将数据从硬盘移动到内存,对内存来说是一个输入的过程。
反之,当我们将数据写入文件时对内存来说需要把数据从自身移动到硬盘,是一个输出的过程。
以字符的形式向文件添加数据,读取数据
package com.io;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
public class Test02 {
public static void main(String[] args) throws IOException {
File file = new File("text.txt");
//true可有可无,代表是向文件追加内容,false或不写会清空文件原有内容
FileWriter fw = new FileWriter(file, true);
BufferedWriter bw = new BufferedWriter(fw);
bw.write("添加");
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
List<String> list = new ArrayList<String>();
String str;
while((str = br.readLine())!=null) {
list.add(str);
}
for(int i=0 ; i<list.size() ; i++) {
System.out.println(list.get(i));
}
bw.close();
}
}
以字节方式向文件写入数据,读取数据
package com.io;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test03 {
public static void main(String[] args) throws IOException{
File file = new File("text01.txt");
FileOutputStream out = new FileOutputStream(file,true);
BufferedOutputStream bos = new BufferedOutputStream(out);
byte[] a = "添加".getBytes();
//字节流直接操作的字节,所以写出中文必须将字符串转换成字节数组
bos.write(a);//以字节数组的方式向文件添加内容
bos.close();
FileInputStream in = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(in);
InputStreamReader isr = new InputStreamReader(bis, "utf-8");
/*
* 此方法无法读取中文
* int n = -1;
while((n = bis.read())!=-1) {
System.out.print((char)n);
}
System.out.println("--");*/
byte[] b = new byte[100];
int m = -1;
while((m = in.read(b))!=-1) {
//可以读取中文
System.out.print(new String(b,0,m));
}
}
}