admin管理员组文章数量:1639832
[1]实验目的:理解文件和流的概念、Java流的层次结构,掌握Java提供的各种字节流类和字符流类的功能和使用方法。
[2]实验内容:
1、编写一个Java应用程序,将已存在的扩展名为.txt的文本文件加密后存入另一个文本文件中。按模板要求,将【代码1】~【代码7】替换为Java程序代码。
import java.io.*;
class SecretExample
{
public static void main(String a[])
{
File fileone=new File("hello.txt");
File filetwo=new File("hello.secret");
char b[]=new char[100];
try{
FileReader in =【代码1】 //创建指向fileone的字符输入流
FileWriter out =【代码2】 //创建指向fileontwo的字符输出流
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】 //创建指向fileontwo的字符输入流
System.out.println("加密后的文件内容:");
n=in.read(b);
while ( n != -1 )
{
String str=new String(b,0,n);
System.out.println("dfjakfjd"+str);
n=in.read(b);
}
in=new FileReader(filetwo);
System.out.println("解密后的文件内容:");
while ( (n=in.read(b)) != -1 )
{
for (int i=0; i<n;i++)
{ b[i]=(char)(b[i]^'a'); }
String str=new String(b,0,n);
System.out.println(str);
}
【代码6】 // in关闭
}
catch(IOException e)
{
System.out.println(e);
}
}
}
package experiment5;
import java.io.*;
class SecretExample {
File file_one=new File("hello.txt");
File file_two=new File("hello.secret");
public void func()
{
char[] code =new char[100];
try {
FileReader in=new FileReader(file_one);//【代码1】创建指向file_one的字符输入流
FileWriter out=new FileWriter(file_two);//【代码2】创建指向file_two的字符输出流
int n;
if((n=in.read(code))!=-1)
{
for(int i=0;i<n;i++)
{
code[i]=(char)(code[i]^1);//异或运算
}
out.write(code,0,n);//【代码3】out 将数组 b 的前 n 单元写到文件
}
out.close();//【代码 4】out 关闭
in=new FileReader(file_two);//【代码5】创建指向file_two的字符输入流
System.out.println("加密后的文件内容:");
n=in.read(code);
if(n!=-1)
{
String str=new String(code,0,n);
System.out.println("dfjakfjd "+str);
}
in=new FileReader(file_two);
System.out.println("解密后的文件内容:");
if((n=in.read(code))!=-1)
{
for(int i=0;i<n;i++)
{
code[i]=(char)(code[i]^1);
}
String str=new String(code,0,n);
System.out.println(str);
}
in.close();//【代码 6】in 关闭
}
catch(IOException e)
{
System.out.println(e);
}
}
}
public class Exp5_1 {
public static void main(String[] args){
SecretExample secretExample = new SecretExample();
secretExample.func();
}
}
hello.txt
hello.secret
2、编程完成下列功能:
1)首先建立两个文件myfiel.txt和myfile2.txt。
2)从标准设备中输入多名学生信息,如学号,姓名,专业,班级,家庭住址等,待输入"bye"时结束,将输入内容保存在myfile1.txt文件中。
3)再将myfile1.txt文件中内容拷贝到myfile2.txt。
package experiment5;
import java.io.*;
import java.util.Objects;
import java.util.Scanner;
//声明实现接口Serializable,实现序列化
class Student implements Serializable{
private final String stu_id;
private final String name;
private final String major;
private final String squad;
private final String address;
Student(String stu_id, String name,String major, String squad, String address){
this.stu_id = stu_id;
this.name = name;
this.major = major;
this.squad = squad;
this.address = address;
}
public Student(Student s){
this(s.stu_id,s.name, s.major, s.squad,s.squad);
}
@Override
public String toString(){
return "学号:"+this.stu_id + "\t姓名:"+this.name + "\t专业:" + this.major + "\t班级:" + this.squad + "\t地址:" + this.address;
}
}
public class Exp5_2 {
public static void main(String[] args) throws IOException {
String stu_id, name, major, squad, address;
FileOutputStream fileOutputStream1 = new FileOutputStream("myfile1.txt");
ObjectOutputStream objectOutputStream1 = new ObjectOutputStream(fileOutputStream1);
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学生学号,姓名,专业,班级和地址,输入”bye“结束(至多999人)。");
while(true){
stu_id = scanner.next();
if(Objects.equals(stu_id, "bye")) break;
name = scanner.next();
major = scanner.next();
squad = scanner.next();
address = scanner.next();
Student student = new Student(stu_id, name, major, squad, address);
objectOutputStream1.writeObject(student);
}
objectOutputStream1.close();
fileOutputStream1.close();
FileInputStream fileInputStream1 = new FileInputStream("myfile1.txt");
ObjectInputStream objectInputStream1 = new ObjectInputStream(fileInputStream1);
FileOutputStream fileOutputStream2 = new FileOutputStream("myfile2.txt");
ObjectOutputStream objectOutputStream2 = new ObjectOutputStream(fileOutputStream2);
FileInputStream fileInputStream2 = new FileInputStream("myfile2.txt");
ObjectInputStream objectInputStream2 = new ObjectInputStream(fileInputStream2);
System.out.println("myfile1.txt中的学生信息:");
while(true){
try{
Student s = (Student) objectInputStream1.readObject();
System.out.println(s.toString());
Student ss = new Student(s);
objectOutputStream2.writeObject(ss);
}catch (EOFException | ClassNotFoundException e){break;}
}
objectInputStream1.close();
fileInputStream1.close();
objectOutputStream2.close();
fileOutputStream2.close();
System.out.println("myfile2.txt中的学生信息:");
while (true){
try{
System.out.println(objectInputStream2.readObject());
}catch (EOFException | ClassNotFoundException e){break;}
}
objectInputStream2.close();
fileInputStream2.close();
}
}
myfile1.txt
myfile2.txt
[3]实验分析
通过本次实验,熟悉了Java中文件和流的概念,掌握了流的使用方法。
在第一题中只涉及到字符串的操作,所以采用字符输入/输出流更为简单。
在第二题中,涉及到对对象的读和写,所以我采用文件输入/输出字节流,和对象字节流操作文件,每次以对象为单位读写,这样更为方便。将每一个Student对象转换成字节流写入文件。这样,每一个对象都要经过序列化转换为字节流,从字节流中重建的时候也有经过反序列化。
这样带来一个问题,在生成的文件里面,并不显示键盘输入的字符,而是序列化后的对象,所以显示为乱码
版权声明:本文标题:Java程序设计实验五 输入输出流 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1729296511a1194786.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论