//程序填空文件字节字符流读写文件的应用 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; //本类中定义了四个静态方法,分别实现了文件字节流读写文件、文件字符流读写文件。 //在main方法中分别从键盘输入字节和字符串数据,测试了这四个方法 public class FilesReadOrWrite { // 使用字节流读文件,返回字节数组 public static byte[] readFileByByte(String filename) ______ IOException { File file = new _____(filename); if (file.exists() && ___.isFile()) {//判断文件存在并且是文件不是目录 FileInputStream fis = new ________(file); ByteArrayOutputStream baos = new ByteArrayOutputStream();// 用于把内存数据输出到一个字节数组 int a = -1; while ((a = ____.read()) != -1) {// 每次从文件中读一个字节 _____.write(___);// 把读到的字节写入字节数组输出流中 } fis.close(); return ____.toByteArray();// 返回字节数组输出流中的字节数组 } else { System.out.println("文件不存在"); return null; } } // 使用字节流写文件,把参数的字节数组以追加的方式写入文件 public static void writeFileByByte(byte[] bytes, String filename) throws IOException { FileOutputStream fos = new FileOutputStream(filename,______); _____.write(______); fos.close(); } // 使用字符流读文件,返回字符串 public static String readFileByChar(String filename) throws IOException { _______ fReader = new FileReader(filename); BufferedReader bReader = new BufferedReader(fReader); StringBuffer stringBuffer = new StringBuffer();//定义一个字符串缓冲区对象 String str = null; while ((str = bReader._______()) != null) {//每次从文件中读一行 _______.append(str+'\n');//把从文件中读的一行追加到字符串缓冲区中 } bReader.close(); return _______.toString();//返回字符串缓冲区中的字符串 } // 使用字符流写文件,把参数的字符串以覆盖的方式写入文件 public static void writeFileByChar(String str, String filename) throws IOException { FileWriter fos = ____________(filename); BufferedWriter bWriter=new BufferedWriter(_____); bWriter.write(_____);//用缓冲流把参数字符串写入文件 bWriter.close(); } public static void main(String[] args) throws IOException { String filename="test.txt"; //从键盘输入字节数组追加到字节数组输出流中 //把字节数组输出流中的字节数组写入文件,再从文件中读出 ByteArrayOutputStream baos = new ByteArrayOutputStream(); int b; while((b=__________.read())!='$') {//每次从键盘输入一个字节,直到输入$为止 baos._______(b);//把键盘输入的字节写入字节数组输出流中 } //调用本类的静态方法,把字节数组输出流中的字节数组写入文件 FilesReadOrWrite.____________(baos.toByteArray(), filename); //调用本类的静态方法,从文件中读出字节数组 _______ bytes=FilesReadOrWrite.readFileByByte(filename); System.out.println(new ______(bytes));//把字节数组转换成字符串输出 String filename1="test1.txt"; //从键盘输入若干行字符串,先追加到字符串缓冲区,再写入文件,再从文件中读出 BufferedReader bReader=new BufferedReader(new InputStreamReader(System.in)); StringBuffer stringBuffer=new ______();//创建字符串缓冲区对象 String string=null; while(!"$"._______(string=______.readLine())) {//每次从键盘输入一行字符串,如果字符串不等于"$",继续循环 stringBuffer.______(string+"");//往字符串缓冲区中追加键盘输入的字符串 } //调用本类的静态方法,把字符串缓冲区中的字符串写入文件 FilesReadOrWrite.___________(stringBuffer.toString(), filename1); //调用本类的静态方法,从文件中读出字符串 String string1=FilesReadOrWrite._________(filename1); System.out.println(string1); } }