1,字符输入流要想以追加模式写入数据,有两种方法,一种是把FileWriter的第二个参数写成true,另外一种就是使用append方法进行追加,这两种方法的区别就是append方法可以动态的选择追加内容,但是改变参数这个方法只能保持一种输入值不变。
而字节输入流OutputStream只有一种追加方法,就是把FileOutputStream的第二个参数写成true。
还有一点就是字符输入流可以直接把要输入的字符串进行直接输入,不需要中间的换种数组。如:writer.write(str);
字符流和字节流还有一点区别就是:字节流是对文件本身的直接操作,不需要通过缓冲区,而字符流则要通过缓冲流来操作文件。意思就是说使用字节流时就算没有执行close方法关闭字节流的操作,还是可以向文件输出内容,但是在字符流中,若不执行close方法,就无法性文件写内容。可以写个Demo尝试一下。字符流之所以必须调用close是因为,字符流在执行过程中引入了缓冲区机制,即写操作先将内容放入缓冲区,若写操作完毕后,不将缓冲区内容刷新到文件的话,文件将为空。(我对这里有一个疑问:如果待写入的数据比较大,超过了缓冲区的限制,那会不会报错?)
字节输入流:
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class TestDemo{
public static void main(String args[]) {
File file=new File("E:"+File.separator+"testdemo1","file.txt");
String str="何时了,往事知多少,小楼昨夜又东风";
OutputStream output=null;
byte b[]=str.getBytes();
try {
output=new FileOutputStream(file,true);
output.write(b);
output.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
字符输入流:
import java.io.File;
import java.io.FileReader;
import java.io.Writer;
import java.io.FileWriter;
import java.io.Reader;
public class TestDemo{
public static void main(String args[]) {
File file=new File("E:"+File.separator+"testdemo1","file.txt");
String str="床前明月光,疑是地上霜";
Reader reader=null;
Writer writer=null;
int temp=0;
int len=0;
char c[]=new char[(int)file.length()];
try {
writer=new FileWriter(file,true);
writer.write(str);
//writer.append("中华人民共和国");
reader=new FileReader(file);
while((temp=reader.read())!=-1) {
c[len]=(char)temp;
len++;
}
writer.close();
reader.close();
}catch (Exception e) {
e.printStackTrace();
}
System.out.println(c);
}
}