存储与读入是程序中不可避免的两项操作,毕竟在一般的情况下,我们的数据都是存储在内存中的,一旦程序终止或者断电,这些数据就全部消失了,要想保存它们,就必须输出文件读入文件。
今天我们要谈的,就是这个内存->外存,外存->内存的过程
1,C++的文件读入,输出
通过ifstream类,ofstream类这两个类实现。
在使用这两个类进行数据读入读出的时候,首先,要建立他们的对象。然后,要给它们对应的路径
ofstream outfile;
ifstream infile;
infile.open("C:\\Users\\32809\\Desktop\\program\\working\\tr4\\in.txt",ios::in);
outfile.open("C:\\Users\\32809\\Desktop\\program\\working\\tr4\\out.txt",ios::out);
之后,就完全可以按照cin,cout的输出输入流去存储了
infile>>a>>b>>c>>ag>>sc>>ar>>it>>ra;
outfile<<setw(8)<<"学号"<<setw(8)<<"姓名"<<setw(8)<<"性别"<<setw(8)<<"年龄"
<<setw(12)<<"课程成绩"<<setw(8)<<"专业"
<<setw(8)<<"总成绩"<<endl;
值得注意的是,据笔者所知,C++并没有直接存储对象的库,所以说,需要的时候,就只能直接重载函数了。
这里举一个例子
ostream &operator<<(ofstream& output,stu &a)
{
output<<setw(8)<<a.num<<setw(8)<<a.name<<setw(8)<<a.sex<<setw(8)<<a.age<<setw(12)<<a.sco
<<setw(8)<<a.sub<<setw(8)<<a.scoa;
return output;
}
这样就可以把对象直接输出了
2,java文件的输入输出
首先,我们先引入几个包。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
然后容我在代码中重点介绍其中的FileOutputStream,FileReader。
/*
输入文件部分
*/
ile file = new File("C:\\Users\\32809\\Desktop\\wen.txt");
//将数据写到指定文件
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
if(!file.exists()){//这里的问题是目标文件是否存在,如果不存在,新建一个,如果存在,直接写入
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
String importNum="";
importNum=importNum+score+' '+time+' '+broad.x1+' '+broad.y1+' '+broad.vx+' '+broad.vy;
for(int i=0;i<ball.length;i++)
{
if(ball[i]!=null)
{
importNum=importNum+' '+ball[i].x1+' '+ball[i].y1+' '+ball[i].vx+' '+ball[i].vy+' '+ball[i].r;
}
}
byte[] buffer = importNum.getBytes();//把数据存入字符数组中
//将buffer中的数据写到指定的文件中了
try {
fos.write(buffer);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*
输出文件部分
*/
File file = new File("C:\\Users\\32809\\Desktop\\wen.txt");//打开文件夹
FileReader fr=null;
try {
fr = new FileReader(file);//新建读入
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
char length;
//System.out.println("null3");
try {
while((length=fr.read())!=-1){//循环读取指定文件的内容
if(length==32) inputnum+=' ';
else inputnum+=length;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
相比之下,java的文件存储似乎比c++复杂了很多,但实际上上只是多出来很多异常处理,这些编译器都能够自动添加,所以难度并没有大多少,换而言之,功能上也并没有丰富多少
但实际上,java的一个特点在于它能够输入输出对象,这里就需要java.io.ObjectInputStream
首先,第一点,也是其他文章经常放到最后一点说的问题,就是类的可序列化。
只有对象支持java.io.Serializable或java.io.Externalizable接口的才能够被从流中读取。
符合上面条件的,我们只要添加implements Serializable就可以了。
之后的操作笔者推荐一篇非常标准的文章给大家,https://blog.csdn.net/u010982856/article/details/52300298
这位的代码写的非常合适,我就是从他那里学习的,想想写个差不多一样的代码放上来也不大好意思,就放上师傅的代码给大家参考吧。