文件的存储与读入

    存储与读入是程序中不可避免的两项操作,毕竟在一般的情况下,我们的数据都是存储在内存中的,一旦程序终止或者断电,这些数据就全部消失了,要想保存它们,就必须输出文件读入文件。
    今天我们要谈的,就是这个内存->外存,外存->内存的过程
    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
这位的代码写的非常合适,我就是从他那里学习的,想想写个差不多一样的代码放上来也不大好意思,就放上师傅的代码给大家参考吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值