实验六 输入输出流程序模板
- 格式:doc
- 大小:86.00 KB
- 文档页数:9
实验6.1实验目的1.掌握文件流的打开、关闭及使用的使用方法2.理解文本文件流与二进制文件流在操作上的区别 6.2实验内容与步骤1.上机实验题一设计一个管理图书目的简单程序,提供的基本功能包括:可连续将新书存入文件“book.dat”中,新书信息加入到文件的尾部;也可以根据输入的书名进行查找;把文件“book.dat”中同书名的所有书显示出来。
为简单起见,描述一本书的信息包括:书号,书名,出版社和作者。
⑴分析 可以把描述一本书的信息定义为一个Book 类,它包含必要的成员函数。
把加入的新书总是加入到文件尾部,所以,以增补方式打开输出文件。
从文件中查找书时,总是从文件开始位置查找,以读方式打开文件。
用一个循环语句实现可连续地将新书加入文件或从文件中查找指定的书名。
由于是以一个Book 类的实例进行文件输入输出的,所以,这文件的类型应该是二进制文件。
简化的参考程序如下:#include <iostream.h> #include <string.h> #include <fstream.h> class Book { long int num;//书号 char bookname[40]; //书名 char publicname[40]; //出版社 char name[20];//作者public: Book() { num=0; bookname[0] =0;publicname[0] =0; name[0] =0;} char * Getbookname(void) { return bookname ;} long Getnum(void ) { return num;}void Setdata(long , char *,char *,char *);void Show(void );Book(long , char *,char *,char *);};void Book::Setdata(long nu , char *bn,char *p,char *n){num = nu; strcpy(bookname,bn);strcpy(publicname,p); strcpy(name,n);}void Book::Show(void ){cout<<"书号:"<<num<<'\t'<<"书名:"<<bookname<<'\t';cout<<"出版社:"<<publicname<<'\t'<<"作者:"<<name<<'\n';}Book::Book(long nu, char * bp,char *p,char *n){ Setdata(nu , bp, p, n); }void main(void){Book b1,b2;long nu;char bn[40]; //书名char pn[40]; //出版社char na[20]; //作者ifstream file1;ofstream file3;char flag = 'y';while( flag=='y' ||flag=='Y') { //由flag控制循环cout<<"\t\t 1: 按书名查找一本书!\n";cout<<"\t\t 2: 加入一本新书!\n";cout<<"\t\t 3: 退出!\n输入选择:";int f;cin>>f;switch(f){case 1:cout<<"输入要查找的书名:"; cin>>bn;file1.open("book.dat",ios::in | ios::binary);//按读方式打开文件while(!file1.eof() ){int n;file1.read((char *)&b1,sizeof(Book));实验n=file1.gcount(); if(n==sizeof(Book)){ if(strcmp(b1.Getbookname(),bn)==0) //显示书的信息 b1.Show(); } }file1.close();break; case 2: cout<<"输入书号:"; cin>>nu; cout<<"输入书名:"; cin>>bn; cout<<"输入出版社:"; cin>>pn; cout<<"输入作者:"; cin>>na;b1.Setdata(nu,bn,pn,na);file3.open("book.dat",ios::app|ios::binary);//增补方式打开文件file3.write((char*)&b1,sizeof(b1)); file3.close(); break;default: flag = 'n';} } }⑵上机要求修改程序增加按出版社、作者。
成都大学实验报告实验项目名称Java的输入与输出流一、实验目的:1. 理解I/O流的概念,掌握其分类2. 掌握文本文件读写、二进制文件读写二、实验内容(包括源程序及相关说明):1. 分别使用FileWriter 和BufferedWriter 往文件中写入10万个随机数,比较用时。
源代码如下:(1)import java.io.*;public class Ex1_1 {public static void main(String[] args) throws IOException{long t=System.currentTimeMillis();FileWriter fw =new FileWriter("d:\\Ex1.txt");for(int i=1;i<=100000;i++){fw.write((int)(Math.random()*10000)+" \n");}fw.close();t=System.currentTimeMillis()-t;System.out.println("The elapsed: "+t);}}(2)import java.io.*;public class Ex1_1 {public static void main(String[] args) throws IOException{long t=System.currentTimeMillis();BufferedWriter fw=new BufferedWriter(new FileWriter("d:\\Ex1.txt"));for(int i=1;i<=100000;i++){fw.write((int)(Math.random()*10000)+"\n");}fw.close();t=System.currentTimeMillis()-t;System.out.println("The elapsed: "+t);}}2. 生成一个html文件,使其能显示2的幂次(0~9)的表格如下:代码如下:import java.io.*;public class Ex1_1 {public static void main(String[] args) throws IOException{BufferedWriter bw=new BufferedWriter(new FileWriter("d:\\Ex2.html"));bw.write("<table border=1 align=center width=200 height=250>");bw.newLine();bw.write("<tr><td align=center>Power of 2<td align=center>Value</tr>");for(int i=0;i<=9;i++){bw.write("<tr><td align=center>"+i+"<td align=center>"+Math.pow(i, 2)+"</tr>");}bw.write("</table>");bw.newLine();bw.close();}}3. 在文本文件bigbook.txt中包含有很长篇幅的英语短文,编写程序要求统计文件的所有短文中包含英文字母“A”的个数,并显示统计的时间。
一、实验目的1. 熟悉计算机输入输出设备的基本概念和作用。
2. 掌握常用输入输出设备的使用方法。
3. 了解输入输出设备的性能指标及其对计算机系统的影响。
二、实验环境1. 实验室:计算机实验室2. 硬件设备:计算机、键盘、鼠标、显示器、打印机、U盘等3. 软件:Windows操作系统三、实验内容1. 输入设备实验(1)键盘输入实验1)实验步骤:① 打开计算机,进入Windows操作系统;② 连接键盘,确保键盘正常工作;③ 打开记事本,输入一段文字;2)实验结果:成功输入文字,观察键盘布局,了解各个键位的含义;3)实验总结:熟练掌握键盘布局,提高输入速度。
(2)鼠标输入实验1)实验步骤:① 打开计算机,进入Windows操作系统;② 连接鼠标,确保鼠标正常工作;③ 使用鼠标在桌面进行拖动、点击等操作;2)实验结果:成功进行鼠标操作,熟悉鼠标的使用方法;3)实验总结:熟练掌握鼠标操作,提高操作效率。
2. 输出设备实验(1)显示器输出实验1)实验步骤:① 打开计算机,进入Windows操作系统;② 观察显示器显示的桌面背景、图标等信息;2)实验结果:显示器正常工作,显示计算机信息;3)实验总结:了解显示器的作用,熟悉显示器的性能指标。
(2)打印机输出实验1)实验步骤:① 打开计算机,进入Windows操作系统;② 将打印机连接到计算机;③ 打开文档,进行打印设置;④ 点击打印按钮,将文档打印到纸上;2)实验结果:成功将文档打印到纸上;3)实验总结:了解打印机的工作原理,熟悉打印机的性能指标。
3. 存储设备实验(1)U盘存储实验1)实验步骤:① 打开计算机,进入Windows操作系统;② 将U盘插入USB接口;③ 在文件资源管理器中找到U盘,进行文件读写操作;2)实验结果:成功将文件存入U盘,从U盘中读取文件;3)实验总结:了解U盘的工作原理,熟悉U盘的容量、读写速度等性能指标。
四、实验结果与分析1. 输入设备实验通过键盘输入实验,掌握了键盘布局和输入方法,提高了输入速度。
实验六:P3.0口输入、P1.0口输出实验一、实验目的:1、掌握P3口、P1口的简单使用。
2、了解并掌握80C51单片机I/O口的基本输入、输出功能。
二、实验器材:1、计算机一台2、Keil Uvision4软件一套三、实验内容:1、P1作为输出口,接8个发光二极管,P3.0口输入一脉冲,控制P1口按16进制加一方式点亮发光二极管。
2、P0作为输出口,接8个发光二极管,P1口作为输入口,接8个开关,通过任意组合开关的输入状态,得到不同的输出状态。
四、实验原理:1、由80C51组成的单片机系统在通常情况下,P0口分时复用作为低8位地址、数据总线,P2口提供高8位地址,P3口用作第二功能,只有P1口通常用作I/O口。
P1口是8位准双向口,它的每一位都可独立的定义为输入或输出,因此,既可以作为8位的并行I/O口,也可作为8位的输入输出端。
2、当某一口工作在输入方式时,对应位的锁存器必须先置1,才能正确地读到引脚上的信号,否则,执行读引脚指令时,若对应位的锁存器的值为0,读的结果永远为0。
五、程序框图:(b)实验2参考流程图(a)实验1参考流程图六、实验步骤:1、打开Keil程序,执行菜单命令“Project”“New Project”,创建一个项目(基本输入输出),并选择单片机型号为AT89C51 。
2、执行菜单命令“File”“New”创建文件,输入源程序,保存为“基本输入输出.ASM”。
在“Project”栏的文件项目管理窗口中右击文件组,选择“Add Files to Group ‘Source Group1’”将源程序“基本输入输出.ASM”添加到项目中。
3、执行菜单命令“Project”“Options for Target ‘Target1’”,在弹出的对话框中选择“Output”选项卡,选中“Creat HEX File”。
4、执行菜单命令“Project”。
“Build Target”,编译源程序,如果编译成功,则在“Output Window”窗口中显示没有错误,并创建了“基本输入输出.HEX”文件;如果有错误,双击该窗口中的错误信息,则在源程序窗口中指示错误语句。
输入输出流实验报告1.编写一个应用程序,读取一个文本文件的内容。
源程序:Work9_1.javaimport java.io.*;public class Work9_1{public static void main(String args[ ]){File readFile=new File("Student.txt"),writeFile=new File("Hello.txt");try{ FileReader inOne=new FileReader("Student.txt");BufferedReader inTwo= new BufferedReader(inOne);FileWriter tofile=new FileWriter("hello.txt");BufferedWriter out= new BufferedWriter(tofile);String s=null;int i=0;while((s=inTwo.readLine())!=null){i++;out.write(s);out.newLine();}out.flush();out.close();tofile.close();inOne=new FileReader("hello.txt");inTwo= new BufferedReader(inOne);while((s=inTwo.readLine())!=null){System.out.println(s);}inOne.close();inTwo.close();}catch(IOException e){System.out.println(e);}}}所读取的文本文件截图:运行界面:2.编写一个应用程序,将用户从键盘输入的10行文字存入文件。
实验六流式输入输出处理一、实验目的1、理解流的概念,流的划分2、掌握文件描述,顺序处理,随机访问处理的方法;3、能够熟练的使用过滤流;掌握字符流处理的方法;4、理解对象串行化的概念和方法。
二、实验内容与要求1、仔细读下面的JA V A语言源程序,自己给出程序的运行结果,理解File类的使用。
package Test03;import java.awt.BorderLayout;import java.awt.Choice;import java.awt.Container;import java.awt.Frame;import java.awt.ItemSelectable;import java.awt.TextField;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.JFrame;public class Ch71 extends JFrame{int n;String dirname="/jdk1.4";File file=new File(dirname);String[] flist=new String[100];Choice choice=new Choice();TextField tf=new TextField();private Container listFile;private InputMethodListener[] filst;public Ch71(){s etLayout(new BorderLayout(10,10));flist=file.list();for (n=0;n<flist.length;n++) {listFile.addInputMethodListener(filst[n]);}add("North",listFile);add("South",tf);setSize(250,200);setVisible(true);((ItemSelectable) listFile).addItemListener(new koListener());addWindowListener(new koWindowListener());}public static void main(String args[]) {new Ch71();}class koListener implements ItemListener {public void itemStateChanged(ItemEvent e) {String ko=(String)e.getItem();for (n=0;n<flist.length;n++)if (ko==flist[n]) {File f=newFile(file+System.getProperty("file.separator")+ko);if (f.isFile()==true)tf.setText(ko+"是个文件!");i f (f.isDirectory()==true)tf.setText(ko+"是个目录!");}}}class koWindowListener extends WindowAdapter {public void windowClosing(WindowEvent e) {dispose();System.exit(0);}}}运行结果如下:2、仔细读下面的JA V A语言源程序,自己给出程序的运行结果package Test03;import java.io.*;public class testRandom2 {public static void main(String args[]){try{RandomAccessFile rf=new RandomAccessFile("rtest.dat", "rw");for(int i = 0; i < 10; i++){rf.writeInt(i);rf.writeDouble(i*1.414);}rf.close();rf = new RandomAccessFile("rtest.dat", "rw");rf.seek(5*(4+8));rf.writeInt(47);rf.writeDouble(47.00021);rf.close();rf = new RandomAccessFile("rtest.dat", "r");for(int i = 0; i < 10; i++){;System.out.println("Value " + rf.readInt() + ": " +rf.readDouble());}rf.close();}catch(IOException e){System.out.println(e.toString());}}}运行结果如下:Value 0: 0.0Value 1: 1.414Value 2: 2.828Value 3: 4.242Value 4: 5.656Value 47: 47.00021Value 6: 8.484Value 7: 9.898Value 8: 11.312Value 9: 12.7259999999999993、定义一个类实现银行帐户的概念,包括的变量有"帐号"和"存款余额",包括的方法有"存款"、"取款"、"查询余额"、”显示帐号”以及存储功能。
深圳大学实验报告课程名称:Java实验序号:上机实践9实验名称:统计英文单词&读取Zip文件班级:计算机3 姓名:卢志敏同组人:实验日期:2008 年12 月29 日教师签字:一、实验目的⏹掌握RandomAccessFile类的使用。
⏹掌握ZipInputStream流的使用。
二、实验环境JDK1.5 WinXp SP 3三、实验要求实验1⏹使用RandomAccessFile流统计一篇英文中的单词,要求如下:(1)一共出现了多少个英文单词。
(2)有多少个互不相同的单词。
(3)给出每个单词出现的频率,并将这些单词按频率大小顺序显示在一个Text--Area 中。
实验2⏹读取book.zip,并将book.zip中含有的文件重新存放到当前目录中的book文件夹中,即将book.zip的内容解压到book文件夹中。
四、实验步骤和内容实验1源代码:WordStatistic.javaimport java.io.*;import java.util.Vector;public class WordStatistic{ Vector allWords,noSameWord;WordStatistic(){ allWords=new Vector();noSameWord=new Vector();}public void wordStatistic(File file){try { RandomAccessFile inOne=new RandomAccessFile(file,"rw");//创建指向文件file的inOne的对象RandomAccessFile inTwo=new RandomAccessFile(file,"rw");//创建指向文件file的inTwo的对象long wordStarPostion=0,wordEndPostion=0;long length=inOne.length();int flag=1;int c=-1;for (int k=0;k<=length;k++){ c=inOne.read(); //inOne调用read()方法boolean boo=(c<='Z'&&c>='A')||(c<='z'&&c>='a');if (boo){ if (flag==1){ wordStarPostion=inOne.getFilePointer()-1;flag=0;}}else{ if (flag==0){ if (c==-1)wordEndPostion=inOne.getFilePointer();elsewordEndPostion=inOne.getFilePointer()-1;inTwo.seek(wordStarPostion); //inTwo调用seek方法将读写位置移动到wordStarPostionByte cc[]=newbyte[(int)wordEndPostion-(int)wordStarPostion];inTwo.readFully(cc); //inTwo调用readFully方法String word=new String(cc);allWords.add(word);if(!noSameWord.contains(word))noSameWord.add(word);}flag=1;}}inOne.close();inTwo.close();}catch(Exception e){}}public Vector getAllWords(){ return allWords;}public Vector getNoSameWord(){ return noSameWord;}}StatisticFrame.javaimport java.awt.*;import java.awt.event.*;import java.util.Vector;import java.io.File;public class StatisticFrame extends Frame implements ActionListener{ WordStatistic statistic;TextArea showMessage;Button openFile;FileDialog openFileDialog;Vector allWord,noSameWord;public StatisticFrame(){ statistic=new WordStatistic();showMessage=new TextArea();openFile=new Button("Open File");openFile.addActionListener(this);add(openFile,BorderLayout.NORTH);add(showMessage,BorderLayout.CENTER);openFileDialog=new FileDialog(this,"打开文件对话框",FileDialog.LOAD);allWord=new V ector();noSameWord=new Vector();setSize(350,300);setVisible(true);addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);}});validate();}public void actionPerformed(ActionEvent e){ noSameWord.clear();allWord.clear();showMessage.setText(null);openFileDialog.setVisible(true);String fileName=openFileDialog.getFile();if(fileName!=null){ statistic.wordStatistic(new File(fileName));allWord=statistic.getAllWords();noSameWord=statistic.getNoSameWord();showMessage.append("\n"+fileName+"中有"+allWord.size()+"个英文单词");showMessage.append("\n其中有"+noSameWord.size()+"个互不相同的英文单词");showMessage.append("\n按使用频率排列: \n");int count[]=new int[noSameWord.size()];for(int i=0;i<noSameWord.size();i++){ String s1=(String)noSameWord.elementAt(i);for(int j=0;j<allWord.size();j++){ String s2=(String)allWord.elementAt(j);if(s1.equals(s2))count[i]++;}}for(int m=0;m<noSameWord.size();m++){ for(int n=m+1;n<noSameWord.size();n++){ if(count[n]>count[m]){ String temp=(String)noSameWord.elementAt(m);noSameWord.setElementAt((String)noSameWord.elementAt(n),m);noSameWord.setElementAt(temp,n);int t=count[m];count[m]=count[n];count[n]=t;}}}for(int m=0;m<noSameWord.size();m++){showMessage.append("\n"+(String)noSameWord.elementAt(m)+":"+count[m]+"/"+allWord.size()+" ="+(1.0*count[m])/allWord.size());}}}}StatisticMainClass.javapublic class StatisticMainClass{ public static void main(String args[]){ new StatisticFrame();}}实验2源代码ReadZipFile.javaimport java.io.*;import java.util.zip.*;public class ReadZipFile{public static void main(String [] args){ File f = new File("book.zip");File dir = new File("Book");byte b[] = new byte[100];dir.mkdir();try{ ZipInputStream in = new ZipInputStream(new FileInputStream(f));ZipEntry zipEntry =null;while((zipEntry=in.getNextEntry())!=null){File file = new File(dir,zipEntry.getName());FileOutputStream out = new FileOutputStream(file);int n=-1;System.out.println(file.getAbsolutePath()+"的内容");while((n=in.read(b,0,100))!=-1){ String str= new String(b,0,n);System.out.println(str);out.write(b,0,n);}out.close();}in.close();}catch(IOException ee){System.out.println(ee);}}}运行效果截屏:五、实验后的练习在StatisticFrame的showMessage中增加单词按字典序排序输出的信息。
实验二I/O 口输入、输出实验一、实验目的1. 学习I/O 口的使用方法。
2. 学习延时子程序、查表程序的编写和使用、参考程序框图三、程序设计1、P0 口循环点亮程序ORG 0030HSTART : MOV P2,#00H; 〃消影MOV A ,#01H; //LOOP : MOV P2 ,A; //点亮一个led 灯ACALL DELAY; RLA;AJMP LOOP;DELAY : MOV R7,#10;DE1 : MOV R6,#200;DE2 : MOV R5,#123;DJNZ R5,$;DJNZ R6,DE2;DJNZ R7,DE1;RETEND 2、I/O 口输入输出(方法一)ORG 0000H;LL1 :CJNE A,50H,LL2;//是否与地址 50h 中数据相等 MOV P0,A;// 相等 输出对应 led 灯MOV A,#00H; MOVC A,@A+DPTR;MOV P2,A; // 输出表格数据到数码管LCALL DELAY;// 延时 //返回程序开头//交换数据//左移//再次交换,此时地址 50h 中数据左移一位 //表格数据地址加一// 返回 继续比较DELAY : MOV R7,#01H;//延时程序 DE1 : MOV R6,#28H;DE2 : MOV R5,#5AH;DJNZ R5,$;// 延时 500ms //左移一位 //跳转循环 //延时程序START : MOV P2,#00H;MOV P0,#00H;MOV P1,#0FFH;MOV DPTR,#TABLE;MOV 50H,#0FEH;L0 :MOV A,P1;CJNE A,#0FFH,L1;AJMP L0;L1 :MOV A,P1;CJNE A,#0FFH,LL1;AJMP L0;//初始化 //p1 口初始化给 ffh 值 //表地址存入 DPTR // 比较初值载入地址 50h //按键消抖 LJMP START; LL2 :XCH A,50H; RL A; XCH A,50H; INC DPTR; LJMP LL1;DJNZ R6,DE2;DJNZ R7,DE1;RETTABLE : ;//DB 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H;DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH;END程序二(方法二)ORG 0000HMOV P2,#00H;MOV P1,#0FFH;MOV P0,#00H;START : MOV P2,#00H;MOV P0,#00H;MOV R1 ,P1;MOV A,R1;CJNE A,#0FFH,L1;AJMP START;LCALL DELAY;L1 : MOV R1,P1;MOV A,R1;CJNE A, #0FFH,LL1;AJMP START;LL1 : CJNE A,#0FEH,LL2;MOV P2,#06H;CPL A;MOV P0,A;LCALL DELAY;AJMP LP;LL2 : CJNE A,#0FDH,LL3;MOV P2,#5BH;CPL A;MOV P0,A;LCALL DELAY; AJMPLP;LL3 : CJNE A,#0FBH,LL4;MOV P2,#4FH;CPL A;MOV P0,A;LCALL DELAY;AJMP LP;LL4 : CJNE A,#0F7H,LL5;//I./O 口初始化//P1 口赋FFH 初值//P2 清0;//P0 清0;//读P1 口//是否有数据输入//无输入则跳转,继续查询//消除按键抖动//是否按键1 输入//是则P2 输出相应的按键号码//A 取反//输出到P0 口//延迟// 跳转到LP//是否按键2 输入//以下同上// 判断按键3 是否按下//判断按键4 是否按下MOV P2,#66H; CPL A;MOV P0,A; LCALL DELAY; AJMP LP;LL5 : CJNE A,#0EFH,LL6;MOV P2,#6DH;CPL A;MOV P0,A;LCALL DELAY;AJMP LP;LL6 : CJNE A,#0DFH,LL7;MOV P2,#7DH;CPL A;MOV P0,A;LCALL DELAY;AJMP LP;LL7 : CJNE A,#0BFH,LL8;MOV P2,#07H; CPLA;MOV P0,A;LCALL DELAY; AJMP LP; LL8 : CJNEA,#7FH,LP;MOV P2,#7FH;CPL A;MOV P0,A;LCALL DELAY; LP: AJMP START; DELAY : MOV R7,#01H; DE1 : MOV R6,#28H; DE2 : MOVR5,#5AH;DJNZ R5,$;DJNZ R6,DE2;DJNZ R7,DE1;RETEND四、思考题1、LED 循环方向更改:1S 的延时程序:// 判断按键5 是否按下//判断按键6 是否按下// 判断按键7 是否按下//判断按键8 是否按下//跳转回程序开头//延时程序RL A; 改成RR A;DELAY : MOV R7,#20; //延时程序DE1 : MOV R6,#200;DE2 : MOV R5,#123;DJNZ R5,$;DJNZ R6,DE2;DJNZ R7,DE1; RET 2、提高电阻阻值3、一般为5V 或者3.3V 。
实验一I/O口输入、输出实验2010.04.20一、实验目的:了解LED二极管的工作原理。
掌握LED二极管亮灭左右移的编程方法。
二、实验原理:八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出“0”时,发光二极管亮。
我们可以运用输出端口指令MOV P1,A或MOV P1,#DATA,只要给累加器值或常数值,然后执行上述的指令,即可达到输出控制的动作。
表1三、实验电路原理图四、程序框图实验程序:START: MOV ACC,#0FEH ;ACC中先装入LED1亮的数据(二进制的11111110)MOV P1,ACC ;将ACC的数据送P1口MOV R0,#7LOOP1: RL A ;将ACC中的数据左移一位MOV P1,A ;把ACC左移后的数据送p1口显示ACALL DELAY ;调用延时子程序DJNZ R0,LOOP1 ;没有移动够7次继续移动MOV R1,#7LOOP2: RR A ;将ACC中的数据右移一位MOV P1,A ;把ACC右移后的数据送p1口显示ACALL DELAYDJNZ R1,LOOP2AJMP START ;移动完7次后跳到开始重来,以达到循环流动效果;----- 延时子程序 -----DELAY: MOV R2,#255D1: MOV R3,#255DJNZ R3,$DJNZ R2,D1RET ;延时子程序结束,返回到调用处的下一句END ;程序结束实验现象:实验实现了单一灯的左移右移。
开始时P1.0口的LED点亮,然后P1.1→P1.2→P1.3→┅→P1.7的LED依次点亮,实现了右移。
当P1.7的LED点亮后,P1.6→P1.5→P1.4→┅→P1.0口的LED又依次点亮,实现了左移。
然后循环,从而实现灯的循环左右移。
实验结论:通过单片机对P1口赋值,然后利用移位RL和RR指令使相应的LED点亮,可以实现灯的左右移。
实验6 输入输出流操作一、实验目的1. 理解数据流的概念2. 理解Java流的层次结构3. 理解文件的概念二、实验要求1. 掌握字节流的基本使用方法2. 掌握字符流的基本使用方法3. 能够创建、读写、更新文件三、实验练习内容1. Java的标准输入输出流System.in/System.out知识点解析: 标准数据流指在字符方式下(如DOS 提示符)程序与系统进行输入输出的方式,键盘和显示器屏幕是标准输入输出设备,数据输入的起点为键盘,数据输出的终点是屏幕,输出的数据可以在屏幕上显示出来。
示例:课本例10.12. 文件字节输入输出流类FileInputStream/ FileOutputStream知识点解析: 文件字节输入输出流主要负责完成对本地磁盘文件的顺序输入与输出操作。
示例:课本例10.23. 数据字节输入输出流DataOutputStream/DataInputStream知识点解析: 使用数据输入流DataOutputStream 和数据输出流DataInputStream 可以读取或写入8种基本数据类型的数据,不用关心它们的实际长度是多少字节。
一般与文件输入流FileInputStream 和输出流类FileOutputStream 一起使用。
示例:课本例10.34. 对象字节输入输出流ObjectInputStream/ ObjectOutputStream知识点解析: 使用对象流可以直接写入或读取一个对象。
由于一个类的对象包含多种信息,为了保证从对象流中能够读取到正确的对象,因此要求所有写入对象流的对象都必须是序列化的对象。
一个类如果实现了Serializable 接口,那么这个类的对象就是序列化的对象。
Serializable 接口没有方法,实现该接口的类不需要实现额外的方法。
示例:课本例10.45. 文件字符输入输出流FileReader/FileWriter和字符缓冲输入输出流BufferedReader/BufferedWriter知识点解析:文件字符输入输出流类与文件字节输入输出流类功能类似,但处理的基本单位是字符。
实验六输入输出实验目标:1. 理解I/O流的概念与机制,掌握其分类;2. 掌握文本文件的读写、二进制文件的读写、处理流类的概念和用法、对象序列化;3. 掌握File类,压缩流类和RandomAccessFile类的使用;4. 遇到I/O方面的问题,能够自行查阅API稳当解决。
实验任务:1、课本198页习题2,并使用这个程序来copy自己硬盘的大文件(任何格式都可以,如电影,最好大于500MB),看看需时多少?提示:首先需要看懂课本文本文件例子,再模仿修改,关键不同在下面三点。
(1)文本文件复制中是每次读一行,而在二进制文件复制中是自行指定读取多少字节的数据,写法如下。
private boolean copyFiles() { //这个私有方法用来拷贝文件,如无异常返回true try {byte[] buf = new byte[512];int num = source.read(buf); //从源文件读取数据while (num > 0) { // 只要能够读取数据,就继续读dest.write(buf, 0, num); //向目标文件写入num = source.read(buf); //从源文件读取数据}}catch (IOException iox) {System.out.println("Problem reading or writing");return false;}return true;}-------------------以上请注意byte[] buf = new byte[512],说明每次只读512字节,请更换每次读取的缓冲字节数,比如byte[] buf = new byte[5120],每次读5mb左右,请试试copy 效率回有所提高吗?请截图回答。
(2)需时多少可以通过CPU时钟计算,方法见下。
Calendar start=Calendar.getInstance();new BinaryFileCopy().copy(args[0], args[1]);Calendar end=Calendar.getInstance();long time=end.getTimeInMillis()-start.getTimeInMillis();System.out.println("copy时间为"+time+"毫秒");(3)因为这个程序执行需要输入参数的,所以在eclipse里面不能直接执行的,要到dos界面去执行,这里命令行的写法就有点讲究了。
实验六输入输出程序设计学生姓名:何茂杰学号:2010305104 专业班级:计算机本科一班指导老师:文远熔实验日期:实验成绩:一、实验目的1) 掌握输入输出程序的编写方法。
2) 熟悉系统功能调用的方法。
3) 熟悉动画程序的编写方法。
二、实验内容1)在CRT上每隔一秒连续显示字符0-9。
编程提示2)用系统功能调用将‘HELLO’由键盘输入,再从屏幕输出‘***HELLO***’。
三.实验设计及步骤为了使输出的字符之间有空格,在每一个循环中输出一个0-9的字符和一个空格。
为了输出0-9,置寄存器BL初值为0,每循环一次使其增量。
为了保证输出是十进制,增量后用DAA调整指令。
由于输出为一位十进制数,用AND 0FH指令屏蔽高4位。
1)在CRT上每隔一秒连续显示字符0-9。
2)用系统功能调用将‘HELLO’由键盘输入,再从屏幕输出‘***HELLO***’。
3)编制在屏幕上画线的子程序,调用该子程序画一矩形。
4)编制字母下落一行的子程序,调用该子程序使字母从屏幕顶部下落到底部。
5)创建一磁盘文件,保存从键盘输入的字符串。
6)编写程序用设置系统时间,首先从键盘以十进制数形式输入时间,然后修改系统时间,并重新以十进制形式显示时间。
7)编写程序将屏幕分割成格状,每一格涂上不同颜色,格数从键盘输入。
8)编写程序在屏幕上显示菜单,输入相应菜单的序号后,选种该菜单项。
四.实验结果执行程序EXAM5-1·EXE,屏幕上依次循环显示一个数字一个空格:0 1 2 3 4 5 6 7 8 9 ……执行程序EXAM5-2·EXE,输入HELLO↙屏幕上显示结果:*** HELLO ***五.实验心得:通过这次的实验又进一步加深了对汇编的理解以及它的整个运行过程,能熟练掌握它的运行过程,也能够看懂一些基本的顺序设计的汇编程序,能设计出简单的顺序汇编。
刚上机时只想按照老师给出的提纲,把缺省的部分照上面给出的提示简单修改后拷贝,可是当程序出错时便不知道哪里的问题也不会修改,最后静下心仔细看程序后理解了,很快就做出来了。
输入输出流西安邮电大学(计算机学院)课内实验报告实验名称:输入输出流专业名称:网络工程班级:学生姓名:学号(8位):指导教师:实验日期:2014年5月29日一. 实验目的及实验环境1. 理解I/O流的概念,掌握其分类2. 掌握文本文件读写、二进制文件读写二. 实验内容1.编写程序,接受用户从键盘输入的一个文件名,然后判断判断该文件是否存在于当前目录。
若存在,则继续输出:文件是否可读可写、文件的大小、文件是一个普通文件还是目录。
2. 编程完成文件复制功能,用命令行方式提供源文件名和目标文件名。
3. 编写一个程序,从键盘输入5个学生的信息(包含学号、姓名、3科成绩),统计各生的总分,然后将学生信息和统计结果分别存入二进制数据文件STUDENT.DA T和文本文件STUDENT.txt中。
并从文件中读取数据,按学生的总分递减排序后,显示前3个学生的学号、姓名和总分。
三.方案设计1.判断文件是否存在,若存在,判断文件是否可读可写,文件是一个普通文件还是目录;若是普通文件,输出文件大小。
2. try{ //读文件BufferedInputStream f1_in=new BufferedInputStream(new FileInputStream(f1)) ;byte[] f1byte=new byte[100];String f1str;int len;while((len=f1_in.read(f1byte))>0){f1str=new String(f1byte,0,len);fstr=fstr+f1str;}f1_in.close();//写文件BufferedOutputStream f2_out=new BufferedOutputStream(new FileOutputStream(f2));f2_out.write(fstr.getBytes(),0,fstr.getBytes().length);f2_out.flush();f2_out.close();}catch(FileNotFoundException fnfe){fnfe.printStackTrace();}catch(IOException ioe){ioe.printStackTrace();}catch(Exception e){e.printStackTrace();}3. for(int i=1; i <= NUM; i++){student=new Student();System.out.println("请输入第" + i + "个学生学号:");student.setNum(scanner.nextInt());System.out.println("请输入第" + i + "个学生姓名:");student.setName(scanner.next());System.out.println("请输入第" + i + "个学生语文成绩:");student.setChineseScore1(scanner.nextFloat());System.out.println("请输入第" + i + "个学生数学成绩:");student.setMathScore2(scanner.nextFloat());System.out.println("请输入第" + i + "个学生英语成绩:");student.setEnglishScore3(scanner.nextFloat());student.setSum(student.getChineseScore1() + student.getMathScore2() + student.getEnglishScore3());dos.writeInt(student.getNum());dos.writeUTF(student.getName());dos.writeFloat(student.getChineseScore1());dos.writeFloat(student.getMathScore2());dos.writeFloat(student.getEnglishScore3());dos.writeFloat(student.getSum());}}catch(Exception e){e.printStackTrace();}}四.测试数据及运行结果1.测试结果如下:2.测试结果如下:3.测试结果如下:五.总结本次实验我们学习了常用I/O流及文件处理方法,File类是对本地文件系统中某个文件或者目录的路径名的一个平台无关的表示,实验可以从控制台输入也可以直接输入,主要是路径要写完整,还有直接在程序中输入时路径要写成如:“D:\\A\\B.txt”形式,不然会报错。
实验7 输入输出流[实验目的]1、深入理解C++的输入输出的含义和实现方法。
2、掌握对文件的输入输出操作。
[实验要求]给出以下各实验内容的源程序代码,并把编译、运行过程中出现的问题以及解决方法填入实验报告中,按时上交。
[实验学时] 2学时。
[实验内容]1、编程序,在显示屏上显示一个由字母B组成的三角形。
(用控制符或流成员函数控制输出格式)[源程序]#include <iostream>#include <iomanip>using namespace std;int main(){for(int n=1;n<8;n++)cout<<setw(20-n)<<setfill(' ')<<" "<<setw(2*n-1)<<setfill('B')<<"B"<<endl;return 0;}[测试数据]2、建立两个磁盘文件f1.dat和f2.dat,编程序实现以下工作:①从键盘输入16个整数,分别存放在两个磁盘文件中(每个文件中放8个整数);②从f1.dat读入8个数,然后存放到f2.dat文件原有数据的后面;③从f2.dat中读入16个整数,将它们按从小到大的顺序存放到f2.dat(不保留原来的数据)。
④分别输出文件f1.dat和f2.dat的内容。
[源程序]#include <iostream>#include <fstream>using namespace std;void fun1(){int a[8];ofstream outfile1("f1.dat"),outfile2("f2.dat");//分别定义两个文件流对象if(!outfile1) //检查打开f1.dat是否成功{cerr<<"open f1.dat error!"<<endl;exit(1);}if(!outfile2) //检查打开f2.dat是否成功{cerr<<"open f2.dat error!"<<endl;exit(1);}cout<<"请输入8个整数,将存放于f1文件中:"<<endl; //输入8个数存放到f1.dat文件中for(int i=0;i<8;i++){cin>>a[i];outfile1<<a[i]<<" ";}cout<<"请输入8个整数,将存放于f2文件中:"<<endl; //输入8个数存放到f2.dat文件中for(i=0;i<8;i++){cin>>a[i];outfile2<<a[i]<<" ";}outfile1.close(); //关闭f1.dat文件outfile2.close(); //关闭f2.dat文件}void fun2(){ifstream infile("f1.dat");//f1作为输入文件if(!infile){cerr<<"open f1.dat error!"<<endl;exit(1);}ofstream outfile("f2.dat",ios::app);//f2.dat作为输出文件,文件指针指向文件尾,向它写入的数据放在原来数据的后面if(!outfile){cerr<<"open f2.dat error!"<<endl;exit(1);}int a;for(int i=0;i<8;i++){infile>>a; //磁盘文件f2.dat读入一个整数outfile<<a<<" "; //将该数存放到f2.dat中}infile.close(); //关闭输入文件outfile.close(); //关闭文件}void fun3(){ifstream infile("f2.dat");//定义输入文件流infile,以输入方式打开f2.datif(!infile){cerr<<"open f2.dat error!"<<endl;exit(1);}int a[16];int i,j,t;for(i=0;i<16;i++)infile>>a[i]; //从磁盘文件f2.dat读入16个数放在数组a中for(i=0;i<15;i++) //用气泡法对20个数排序for(j=0;j<15-i;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}infile.close(); //关闭输入文件法f2.datofstream outfile("f2.dat",ios::out); //f2.dat作为输出文件,文件原有内容删除if(!outfile){cerr<<"open f2.dat error!"<<endl;exit(1);}cout<<endl<<"输出f2文件中数据:"<<endl;for(i=0;i<16;i++){outfile<<a[i]<<" "; //向f2.dat输出已排序的16个数cout<<a[i]<<" "; //同时输出到显示器}cout<<endl;outfile.close();}int main(){fun1();fun2();fun3();return 0;}[测试数据]3、利用字符串流完成下列操作:①将3个职工的数据按职工编号由小到大的顺序(包括编号、姓名、年龄、工资)保存在字符数组c中。
深圳大学实验报告实验课程名称:程序设计实验与课程设计实验项目名称:实验10 C++流输入与流输出学院:计软专业:计科报告人:学号:班级: 3同组人:无指导教师:朱安民实验时间:2014年6月16日提交时间:2014年6月16声明:本次实验内容由报告人和同组人独立完成,所有涉及到他人的工作均已说明。
报告人和同组人均同意教师及学校为教学活动而引用本实验的内容,且无需事先征得同意和特别说明。
教务处制一、实验目的1.掌握标准输入输出(iostream库中标准对象cin、cout)的使用2.掌握IO流类成员函数输入输出(cin.get, cin.getline, cin.read; cout.put, cout.write)的使用3.掌握输出格式(标准控制符、IO流类成员函数、iomanip头文件中的控制符)控制方法4.掌握磁盘文件的输入输出方法二、实验说明和实验环境1.在奥特曼类的基础上,编写一个程序,重载运算符“》”和“《”,使得用户可以直接(格式化)输出奥特曼的状态。
在主程序中输入若干个(3个)奥特曼的状态,并分别将它们保存到文件RecordU.txt中。
然后读取并显示文件中的内容。
2.奥特曼和怪物都具有属性:等级, 生命, 攻击, 经验, 金钱,都具有方法:初始化initial和显示状态display在奥特曼的初始化中,需要接受外来等级参数,生命, 攻击的数值初始化为等级的10倍,金钱为等级的100倍,经验恒为0在怪兽的初始化中,需要接受外来等级参数,生命, 攻击的数值初始化为等级的8倍,经验为等级的80倍,金钱为等级的800倍对怪兽和奥特曼的状态输出采用运算符《重载的方法,并结合display方法使用,注意本题目要求怪兽和奥特曼的状态输出必须使用重载运算符《,不能直接使用display方法。
注意:为了实现运算符《重载,需要包含头文件<iomanip>经常天降怪石会砸中奥特曼或怪兽,如果被幸运石砸中,就会处于“鸿运当头”状态,被砸对象除等级外其它属性全部翻倍;如果被厄运石砸中,就会陷入“倒霉透顶”状态,被砸对象除等级外其它属性全部减半。
一、实验目的:1.掌握基本的输入输出操作及格式;2.用C++预定义的文件I/O类进行文件输入输出。
二、实验内容:1.使用I/O流以文本方式建立一个文件test1.txt,写入字符“已成功写入!”再编制一段源程序,使用I/O流以文本方式打开test1.txt,读出内容并显示出来。
2.设输入字符串“Taizhou University”,用串I/O的方法编程逐个读取这个串的每个字符,直到读完为止,并在屏幕上输出。
三、实验过程及记录:fstream若写为ofstream则会发生不匹配的错误,文件的读入读出也要加上相应的ios::out和ios::in四、实验结果及分析:读入读出文件的格式要注意,第二个实验由于‘\0’的存在,导致了最后一个字符多输出了一次,后来用长度改进消除了附源码:1的源码:#include<fstream.h>void main(){fstream file1("test1.txt",ios::out);file1<<"已成功写入!";//读入文件file1.close();file1.open("test1.txt",ios::in);//打开文件char s[20];file1.getline(s,20);cout<<s<<endl;file1.close();}2的源码:#include <iostream.h>#include <strstream.h>void main(){char n;char string[]="Taizhou University";istrstream s(string);int len=strlen(string),i;for(i=0;i<len-1;i++)//输入字符{s >>n;cout<<n<<" ";}cout <<endl;}。
实验报告课程名称java程序设计实用教程实验名称输入输出文件件处理实验类型设计型实验地点机房304 实验日期2012-3-28 指导教师某某人专业计算机科学与技术班级算机1003学号************姓名********成绩辽宁石油化工大学计算机与通信工程学一.实验目的:二.实验要求:三、程序代码:代码1:package bao;import java。
awt。
BorderLayout;import java。
awt。
event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java。
io.DataOutputStream;import java。
io。
FileInputStream;import java。
io.FileOutputStream;import java.io.IOException;import java。
io。
InputStreamReader;import javax。
swing.JFrame;import javax.swing。
JButton;import javax。
swing。
JPanel;import javax.swing.JTextArea;import javax.swing。
JTextField;import java。
io。
DataInputStream;public class shiyan12 {public static void main(String[] args) {thisplay t=new thisplay();t.setSize(600,400);t。
setVisible(true);t。
setDefaultCloseOperation(JFrame。
EXIT_ON_CLOSE);}}class thisplay extends JFrame{JTextField field,field1;JTextArea display;JButton b1,b2,b3,b4;FileOutputStream fo;FileInputStream fi;DataOutputStream d0;DataInputStream di;JPanel p;public thisplay(){b1=new JButton("输入”);b2=new JButton("输出”);b3=new JButton(”输入”);b4=new JButton("输出”);display=new JTextArea();field=new JTextField(10);field1=new JTextField(10);p=new JPanel();Listener l=new Listener();//***********************************p。
第1题:文件加密(应用字符输入输出流)程序模板请按模板要求,将【代码1】~【代码6】替换为Java程序代码。
SecretExample.javaimport 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单元写到文件}【代码3】// out关闭in=【代码4】// 创建指向fileTwo的字符输入流System.out.println("加密后的文件内容:");while((n=in.read(b))!=-1){String str=new String(b,0,n);System.out.println(str);}in=【代码5】// 创建指向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.printf(new String(b,0,n));}【代码6】// in关闭}catch(IOException e){System.out.println(e);}}}第2题:读写基本类型数据(应用数据流)程序模板按模板要求,将【代码1】~【代码21】替换为Java程序代码。
NumberExample.javaimport java.io.*;public class NumberExample{public static void main(String args[]){int a1=12,a2=1180;long b=808080;float x1=3.14F,x2=12.456F;double d=1234.9876;boolean boo1=true,boo2=false;char c='我';File f=【代码1】//创建文件。
try{FileOutputStream fos=【代码1】// 创建指向f文件输出流DataOutputStream out_data=【代码2】// 创建指向fos 的数据输出流【代码2】// out_data将数据a1写入到文件【代码3】// out_data将数据a2写入到文件【代码4】// out_data将数据b写入到文件【代码5】// out_data将数据x1写入到文件【代码6】// out_data将数据x2写入到文件【代码7】// out_data将数据d写入到文件【代码8】// out_data将数据boo1写入到文件【代码9】// out_data将数据boo2写入到文件【代码10】// out_data将数据c写入到文件}catch(IOException e){}try{FileInputStream fis=【代码11】// 创建指向f文件输入流DataInputStream in_data=【代码12】// 创建指向fis 的数据输入流System.out.println(【代码13】); // in_data读取int整数System.out.println(【代码14】); // in_data读取int整数System.out.println(【代码15】); // in_data读取long整数System.out.println(【代码16】); // in_data读取float数System.out.println(【代码17】); // in_data读取float数System.out.println(【代码18】); // in_data读取double数System.out.println(【代码19】); // in_data读取boolean数据System.out.println(【代码20】); // in_data读取boolean数据System.out.print(【代码21); // in_data读取char数据}catch(IOException e){}}}第3题:字符输入/输出流以及缓冲流的用法,将【代码1】~【代码14】替换为Java程序代码。
ReadExample.javaimport java.io.*;public class ReadExample{public static void main(String args[ ]){File file=new File("c:/1000","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 file的输入流while((s=【代码14】)!=null) // inTwo读取一行{System.out.println(s);}inOne.close();inTwo.close();tempFile.delete();}catch(IOException e){System.out.println(e);}}}选做题4.对象流的使用Calendar类的用法参照书7.2),将【代码1】~【代码9】替换为Java程序代码。
ObjectExample.javaimport java.util.*;import java.io.*;public class ObjectExample{public static void main(String args[ ]){Calendar calendar1=Calendar.getInstance(); // 创建一个日历对象Calendar calendar2=Calendar.getInstance(); // 创建一个日历对象calendar1.set(1949,9,1); // 将日历时间设置为1949年10月1日,注意9表示十月calendar2.set(2005,9,1);try{File f=【代码1】// 创建一个名字为"a.txt"的文件FileOutputStream fileOut=【代码2】// 创建指向文件f的文件输出流ObjectOutputStream objectOut=【代码3】// 创建指向文件fileOut的对象输出流【代码4】// objectOut写对象calendar1到文件【代码5】// objectOut写对象calendar2到文件FileInputStream fileIn=【代码6】// 创建指向文件f的文件输入流ObjectInputStream objectIn【代码7】// 创建指向文件fileIn 的对象输入流Calendar cloneCalendar1=【代码8】// objectOut读出对象Calendar cloneCalendar2=【代码9】// objectOut读出对象cloneCalendar1.setTime(new Date());cloneCalendar2.set(9999,9,1);int 年=calendar1.get(Calendar.YEAR),月=calendar1.get(Calendar.MONTH)+1,日=calendar1.get(Calendar.DAY_OF_MONTH);System.out.printf("\ncalendar1的日期:%d-%d-%d",年,月,日);年=calendar2.get(Calendar.YEAR);月=calendar2.get(Calendar.MONTH)+1;日=calendar2.get(Calendar.DAY_OF_MONTH);System.out.printf("\ncalendar2的日期:%d-%d-%d",年,月,日);年=cloneCalendar1.get(Calendar.YEAR);月=cloneCalendar1.get(Calendar.MONTH)+1;日=cloneCalendar1.get(Calendar.DAY_OF_MONTH);System.out.printf("\ncloneCalendar1的日期:%d-%d-%d",年,月,日);年=cloneCalendar2.get(Calendar.YEAR);月=cloneCalendar2.get(Calendar.MONTH)+1;日=cloneCalendar2.get(Calendar.DAY_OF_MONTH);System.out.printf("\ncloneCalendar2的日期:%d-%d-%d",年,月,日);}catch(Exception event){System.out.println(event);}}}第5题:RandomAccessFile类的使用,将【代码1】~【代码8】替换为Java程序代码。