当前位置:课程学习>>第七章 输入输出流>>实践活动
同学们,实践是检验真理问题的唯一标准,运用你们学到的知识实践检验一下能力提升了吗?
实践主题1:文件加密
实践目标1:掌握字符输入、输出流用法。
实践任务1:按模板要求,将[代码]处替换为Java程序代码
实践要求1:编写一个Java应用程序,将已存在的扩展名为.txt文本文件加密后存入到另一个文本文件中。
SecretExample.java
import java.io.*;
public class SecretExample {
public static void main(String[] args) {
File fileOne=new File("hello.txt"),fileTwo=new File("hello.secret");
char b[]=new char[100];
try {
FileReader in=[代码1] //创建指向fileOne的字符输入流
FileWriter out=[代码2] //创建指向fileTwo的字符输出流
int n=-1;
while((n=in.read(b))!=-1) {
for(int i=0;i<n;i++)
b[i]=(char)(b[i]^'a');
[代码3] //out将数组b的前n单元写到文件
}
[代码4] //out关闭
in=[代码5] //创建指向fileTwo的字符输入流
System.out.println("加密后的文件内容:");
while((n=in.read(b))!=-1) {
String str=new String(b,0,n);
System.out.println(str);
}
in=[代码6] //创建指向fileTwo的字符输入流
System.out.println("解密后的文件内容:");
while((n=in.read(b))!=-1) {
for(int i=0;i<n;i++)
b[i]=(char)(b[i]^'a');
System.out.println(new String(b,0,n));
}
[代码7] //in关闭
}
catch(IOException e) {
System.out.println(e);
}
}
}
这个实践主要是加强对字符输入输出流的掌握。参考代码如下:
FileReader in=new FileReader(fileOne); //[代码1]
FileWriter out=new FileWriter(fileTwo); //[代码2]
out.write(b,0,n); //[代码3]
out.close(); //[代码4]
in=new FileReader(fileTwo); //[代码5]
in=new FileReader(fileTwo); //[代码6]
in.close(); //[代码7]
实践主题2:给文件的内容添加行号
实践目标2:掌握字符输入、输出流以及缓冲流的用法。
实践任务2:按模板要求,将[代码]处替换为Java程序代码。
实践要求2:编写一个Java应用程序,给已存在的.txt文本文件添加行号。要求该文本文件事先用文本编辑器编辑完毕,保存在d:\myjava目录中,命名为
ReadExample.java
import java.io.*;
public class ReadExample {
public static void main(String[] args) {
File file = new File("d:/myjava", "hello.txt");
File tempFile = new File("temp.text");
try {
FileReader inOne =[代码1] //创建指向文件file的输入流
BufferedReader inTwo =[代码2] //创建指向inOne file的输入流
FileWriter tofile =[代码3] //创建指向文件tempFile的输出流
BufferedWriter out =[代码4] //创建指向tofile的输出流
String s = null;
int i = 0;
s =[代码5] //inTwo读取一行
while (s != null) {
i++;
out.write(i + " " + s);
out.newLine();
s =[代码6] //inTwo读取一行
}
inOne.close();
inTwo.close();
out.flush();
out.close();
tofile.close();
inOne =[代码7] //创建指向文件tempFile的输入流
inTwo =[代码8] //创建指向inOne file 的输入流
tofile =[代码9] //创建指向文件file的输出流
out =[代码10] //创建指向tofile的输出流
while ((s =[代码11])!=null){ //inTwo读取一行
out.write(s);
out.newLine();
}
inOne.close();
inTwo.close();
out.flush();
out.close();
tofile.close();
inOne =[代码12] //创建指向文件file的输入流
inTwo =[代码13] //创建指向inOne的输入流
while ((s =[代码14])!=null){ //inTwo读取一行
System.out.println(s);
}
inOne.close();
inTwo.close();
tempFile.delete();
} catch (IOException e) {
System.out.println(e);
}
}
}
这个实践主要是加强对字符输入、输出流以及缓冲流的掌握。参考代码如下:
FileReader inOne=new FileReader(file); //[代码1]
BufferedReader inTwo=new BufferedReader(inOne); //[代码2]
FileWriter tofile=new FileWriter(tempFile); //[代码3]
BufferedWriter out=new BufferedWriter(tofile); //[代码4]
s=inTwo.readLine(); //[代码5]
s=inTwo.readLine(); //[代码6]
inOne=new FileReader(tempFile); //[代码7]
inTwo=new BufferedReader(inOne); //[代码8]
tofile=new FileWriter(file); //[代码9]
out=new BufferedWriter(tofile); //[代码10]
while((s=inTwo.readLine() )!=null) { //[代码11]
inOne=new FileReader(file); //[代码12]
inTwo=new BufferedReader(inOne); //[代码13]
while(( s=inTwo.readLine() )!=null) { //[代码14]
实践主题3:使用RandomAccessFile类处理文件
实践目标3:掌握RandomAccessFile类的使用。
实践任务3:按模板要求,将[代码]处替换为Java程序代码。
实践要求3:
(1)使用RandomAccessFile流读取文件,舍去前4行和后6行的内容。
(2)使用RandomAccessFile流将一个文件的内容倒置读出。
RandomExample.java
import java.io.*;
public class RandomExample {
public static void main(String[] args) {
File f = new File("hello.txt");
try {
RandomAccessFile random =[代码1] //创建指向文件f的random对象
[代码2] //将random的读取位置定位在文件内容的开始处
long m = random.length();
while (m > 0) {
m = m - 1;
[代码3] //将random的读取位置定位在距文件开头m个字节
int c = random.readByte();
if (c <= 255 && c >= 0)
System.out.print((char) c);
else {
m = m - 1;
[代码4] //将random的读取位置定位在距文件开头m个字节
byte cc[] = new byte[2];
random.readFully(cc);
System.out.print(new String(cc));
}
}
long forthEndPosition = 0;
int forth = 1;
byte n = -1;
while (([代码5])!=-1 && (forth <= 4)){ //random读取一个字节的数据
if (n == '\n') {
forthEndPosition = random.getFilePointer();
forth++;
}
}
[代码6] //将random的读取位置定位在文件内容的末尾
long endPosition =[代码7] //获取当前random的读取位置
long mark = endPosition;
int j = 1;
while ((mark >= 0) && (j <= 6)) {
mark--;
random.seek(mark);
n = random.readByte();
if (n == '\n') {
endPosition = random.getFilePointer();
j++;
}
}
[代码8] //将random的读取位置定位在距文件开头forthEndPosition个字节处
long startPoint = random.getFilePointer();
while (startPoint < endPosition - 1) {
n = random.readByte();
System.out.print((char) n);
startPoint = random.getFilePointer();
}
random.close();
} catch (IOException ee) {
}
}
}
这个实践主要是加强对RandomAccessFile类的掌握。参考代码如下:
RandomAccessFile random=new RandomAccessFile(f,"rw"); //[代码1]
random.seek(0); //[代码2]
random.seek(m); //[代码3]
random.seek(m); //[代码4]
while((n=(byte) random.read() )!= -1 && (forth <=4 )) { //[代码5]
random.seek(random.length()); //[代码6]
long endPosition=random.getFilePointer(); //[代码7]
random.seek(forthEndPosition); //[代码8]