一、 实验目的和要求
实验目的和要求:要求学生能在学习和理解课堂学习内容中JAVA流编程理论的基础上,学习并逐步掌握JAVA流程序的编写和调试,学习根据处理需求对不同流的正确选择使用和组合使用方法。
实验内容:设计和编写一个程序从键盘读入一行字符串,将其写入一个文本文件中,再编写另一个程序从文本文件中读入字符串并在命令行窗口显示出来。
二、实验代码
写入文件
package think; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.ObjectInputStream.GetField; public class java_exp_03iostream { public static void main(String[] args) { //字符缓冲流 BufferedReader br = null; BufferedWriter bw = null; try { //br=newBufferedReader(newFileReader("d:\\buffered.txt")); //从键盘读取字节流 转化成字符流 包装成缓冲字符流 br= new BufferedReader(new InputStreamReader(System.in)); bw = new BufferedWriter(new FileWriter("d:\\buffered.txt")); for(String str; (str= br.readLine() )!= null ; ) { if(str.equalsIgnoreCase("e")||str.equalsIgnoreCase("exit")) { System.out.println("退出");break;} else { bw.write(str); bw.newLine(); //行分隔符 } } } catch (IOException e) { e.printStackTrace(); // TODO: handle exception }finally //关闭两个buffered对象 { try { if(br != null) br.close(); } catch (IOException e) { // TODO: handle exception e.printStackTrace(); } try { if(bw != null) bw.close(); } catch (IOException e) { // TODO: handle exception e.printStackTrace(); } } } }<span style="font-weight: bold;"> </span>
控制台输入字符串,输入e退出,把字符串写入文件。
第二个程序读出文件内容。
<span style="font-size:12px;"><strong>p</strong>ackage think; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class java_exp_03read { public static void main(String[] args) { BufferedReader br = null; try { br = new BufferedReader(new FileReader("d:buffered.txt")); for(String str; (str= br.readLine() )!= null ; ) { System.out.println(str); } } catch (IOException e) { // TODO: handle exception e.printStackTrace(); }finally{ try { if(br != null) br.close(); } catch (IOException e) { // TODO: handle exception e.printStackTrace(); } } } }</span>
三、实验总结
IO流学习小结:
*FileInputStream
*FileOutputStream 字节 文件输入输出流
*FileReader
*FileReader 字符 文件输入输出流
*Buffered+* 缓冲流类 属于过滤流 包装 文件流 常用
*InputStreamReader
*OutputStreamReader 转换流
*DataInputStream
*DataOutputStream 数据流
*PrintStream
*PrintWriter 打印流
*ObjectOutputStream
*ObjectInputStream 对象流
整体的思路:
*文件的输入输出有很多种方法可以实现,区别在于效率,字符的编码不同,采用的方式可能也不同。
遇到的问题和解决的方法:
*问题: 最先采用的方法是FileInputStream,FileOutputStream。如果写入的是英文或者数字,没问题。如果是中文,则从文件输入的时候,有问题。输出到文件没问题。百度+思考了一会儿,结果如下:unicode编码时,中文是两个字节编码的。用字节流的方式从文件读进来的时候,遇到中文的字符,把中文拆成两个字节读取,所以会乱码。而字节流输出到文件的时候,会根据平台的默认编码方式把中文字符转换成了字节数组,一个字节一个字节的输出文件,windows记事本可以自动认出中文字符。所以,文本内容需要读取的时候,一般不用字节流。
* 优化:在用了字符流输入输出之后,又用了缓冲流,来提高效率。先把读取或者写入到文件的内容,先保存在缓冲数组里,一次性写入或者输出,提高了效率。在我写的程序可以很好的体现出来:比如,我在从console写字符到文件的时候,输入 e 或者 exit结束,再没有输入e 和exit的时候,打开buffered的时候,会发现是没有内容的。结束之后,才显示内容。
* 心得:C,C++文件的输入输出都学过,但是由于平时很少写小软件,所以没用到这个。但是输入输出很重要。
版权声明:本文为博主原创文章,未经博主允许不得转载。