实验十四 字符流设计
实验目的:
1. 进一步了解并熟悉Java 的I/O 流的概念;
2. 掌握典型字符流类的操作方法。
实验题目:
Reader 和Writer 是面向字符输入的,它们以字符(16 位) 为单位读写,效率较字节流高.在可能的情况下,尽量用该类读、写。
①读入与写出文本文件: 调试程序IODemo1.java
read(): 读入一个字符;write(int temp): 写出一个字符
问题:很多时候需要逐行读取文本内容,用下面的方法解决。
②逐行读入与写出文本文件 (readLine(): 一行一行读):调试程序IODemo2.java 和调试程序IODemo3.java
BufferReader 与BufferedWriter 或者BufferReader 与PrintWriter
另做题目:RandomAccessFile 类的使用
调试程序:
实验要求:
1. 分析程序功能,设置好运行环境;
2. 调试程序,写出运行结果。
IODemo1.java
import java.io.*;
public class IODemo1
{ public static void main(String[] args)
{int temp;
try
{ FileReader in=new FileReader("demo.txt");
FileWriter out=new FileWriter("newdemo.txt");
while(in.ready()) //ready() 方法 : 判断文件读入流类是否准备好
{ temp=in.read(); // 从源文件读入一个字符 (2 个字节 ), 返回该字符的 int 数据
out.write(temp); //写出一个字符temp(实际上,只是写到输出缓冲区里)
}
in.close();
out.close(); //保存newdemo.txt文件的内容(这时才真正进行了磁盘文件的写操作)
//若把这一句屏蔽,则newdemo.txt文件大小为0字节
System.out.println("成功创建newdemo.txt文件,请查看!");
}
catch(Exception e){};
}
}
IODemo2.java
import java.io.*;
public class IODemo2
{public static void main(String[] args)
{String s=new String();
try
{// 构造方法 :BufferReader(Reader in)
BufferedReader in=new BufferedReader(new FileReader("source.txt"));
// 构造方法 :BufferWriter(Write out)
BufferedWriter out=new BufferedWriter(new FileWriter("destnation.txt"));
//给目标文件加一行信息:
out.write("the following is from source");
out.newLine(); // 写一个换行符
while((s=in.readLine())!=null) // 读取一行文本
{ out.write(s);
out.newLine();
}
in.close();
out.close(); //关闭输出流,将缓冲中的数据一次性写到目的文件中
System.out.println("成功创建destnation.txt文件,请查看!");
}
catch(Exception e){};
}
}
IODemo3.java
import java.io.*;
public class IODemo7_2
{public static void main(String[] args)
{String s=new String();
try
{// 构造方法 :BufferReader(Reader in)
BufferedReader in=new BufferedReader(new FileReader("source.txt"));
// 构造方法 :PrintWriter(Write out)
PrintWriter out=new PrintWriter(new FileWriter("destnation.txt"));
//给目标文件加一行信息:
out.println("the following is from source");
while((s=in.readLine())!=null) // 读取一行文本
{ out.println(s);
}
in.close();
out.close(); // 关闭输出流 , 将缓冲中的数据一次性写到目的文件中
System.out.println(" 成功创建 destnation.txt 文件 , 请查看 !");
}
catch(Exception e){};
}
}
Random_RW.java
import java.io.*;
public class Random_RW
{ public static void main(String[] args)
{ String string;
String array[]=new String[256];
long len=0;
int i=0,counter=0;
try
{ //以既读又写的方式建立一个数据流,源为names.txt文件
RandomAccessFile access=new RandomAccessFile("names.txt","rw");
len=access.length(); // 统计文件长度 ( 按字符个数计算 ), 回车换行统计为 2 个字符
access.seek(len); // 设置指针到下一个写操作的位置 ( 从位置 0 算起 )
access.writeBytes("fox/n"); // 按字节序列将一个字符串写到这个文件中
access.writeBytes("bee/n");
access.seek(0); // 将指针重新定位到文件的起始位置
while ( (string = access.readLine()) != null) // 行读 , 结果记录到 string
{ counter++; // 记录行数
array[i++]=string; // 读出的数据 ( 字符串 ) 存储到数组里
}
access.close();
}
catch (IOException ex) {}
for(i=0;i<counter;i++) //显示数组信息
System.out.println(array[i]);
}
}