实验5流1.编写程序,要求:用户在键盘每输入一行文本,程序将这段文本显示在控制台中。当用户输入的一行文本是“exit”(不区分大小写)时,程序将用户所有输入的文本都写入到文件log.txt中,并退出。(要求:控制台输入通过流封装System.in获取,不要使用Scanner)packageshiyanwu1;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.PrintWriter;publicclasstest1{//获得系统换行符privatestaticfinalStringLINE_SEP=System.getProperty(line.separator);publicstaticvoidmain(String[]args)throwsException{try(BufferedReaderin=newBufferedReader(newInputStreamReader(System.in))){Stringline;StringBuildersBuilder=newStringBuilder();while(true){line=in.readLine();//读入一行字符串if(line==null||exit.equals(line)||EXIT.equals(line)){break;}sBuilder.append(line).append(LINE_SEP);}//将sBuilder中的数据写入log.txttry(PrintWriterwriter=newPrintWriter(D:/javaexamples/myjava/src/shiyanwu1/show.txt)){writer.print(sBuilder.toString());}}}}2.查看File类的API文档,使用该类实现一个类FileList,它提供两个静态方法:1)printContentsInOneDirectory:能够将输入参数path所指定的本地磁盘路径下的所有目录和文件的名称(指明是目录还是文件,格式见下图)打印出来;2)readFileAndDirectory:能够将输入参数path所指定的本地磁盘路径下的所有目录(包含子目录)和文件的名称(指明是目录还是文件,格式见下图)以层次化结构打印出来。例如,某个目录下面有子目录a和文件Teacher.class,目录a下面有子目录b(下面有文件Teacher.java)和c(下面有文件Test.java和Test.class)以及文件1.txt,将该目录对应的路径作为输入参数调用该方法,程序的输出如下图所示。packageshiyanwu2;importjava.io.File;publicclasstest2{PublicstaticvoidprintContentsInOneDirectory(Stringpath){Filefile=newFile(path);if(!file.exists()){thrownewRuntimeException(String.format(文件%s不存在!,path));}File[]childFiles=file.listFiles();for(FilechildFile:childFiles){if(childFile.isFile()){System.out.format([文件]%s\n,childFile.getName());}else{System.out.format([目录]%s\n,childFile.getName());}}}/****@parampath目录路径*@paramindent当前缩进(即输出-)的个数*/publicstaticvoidreadFileAndDirectory(Stringpath,intindent){Filefile=newFile(path);if(!file.exists()){thrownewRuntimeException(String.format(文件%s不存在!,path));}File[]childFiles=file.listFiles();for(FilechildFile:childFiles){for(inti=0;iindent;++i){System.out.print(-);}if(childFile.isFile()){System.out.format([文件]%s\n,childFile.getName());}else{System.out.format([目录]%s\n,childFile.getName());readFileAndDirectory(childFile.getAbsolutePath(),indent+2);}}}publicstaticvoidmain(String[]args)throwsException{System.out.println(测试printContentsInOneDirectory方法:);printContentsInOneDirectory(some_dir);System.out.println(\n测试readFileAndDirectory方法:);readFileAndDirectory(some_dir,0);}}3.假设某个餐馆平时使用:1)文本文件(orders.txt)记录顾客的点菜信息,每桌顾客的点菜记录占一行。每行顾客点菜信息的记录格式是“菜名:数量,菜名:数量,…菜名:数量”。例如:“烤鸭:1,土豆丝:2,烤鱼:1”。2)文本文件(dishes.txt)记录每种菜的具体价格,每种菜及其价格占一行,记录格式为“菜名:价格“。例如:“烤鸭:169”。编写一个程序,能够计算出orders.txt中所有顾客消费的总价格。packageshiyanwu3;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;publicclassorder{publicstaticvoidmain(String[]args){orderfirst=neworder();ListStringorderDatas=first.readFile(D:/javaexamples/myjava/src/shiyanwu3/orders.txt);ListStringdishesDatas=first.readFile(D:/javaexamples/myjava/src/shiyanwu3/dishes.txt);MapString,IntegerorderDetail=first.resolveOrderDatas(orderDatas);MapString,IntegerdishesDetail=firs.resolveOrderDatas(dishesDatas);StringdishesName=null;intdishesCount=0;inttotalPrice=0;for(Map.EntryString,Integere:orderDetail.entrySet()){dishesName=e.getKey();dishesCount=e.getValue();totalPrice+=dishesDetail.get(dishesName)*dishesCount;System.err.println(dishesName+总消费为:+totalPrice);}}privateListStringreadFile(StringfileName){if(fileName!=null&&!.equals(fileName)){Filefile=null;file=newFile(fileName);if(file.exists()){ListStringdatas=newArrayListString();try{InputStreamis=newFileInputStream(file);BufferedReaderbr=newBufferedReader(newInputStreamReader(is,gb2312));Stringstr=null;while(true){str=br.readLine();if(str!=null){datas.add(str);}else{break;}}br.close();}catch(Exceptione){}returndatas;}}returnnull;}privateMapString,IntegerresolveOrderDatas(ListStringdatas){Stringtemp1[]=null,temp2[]=null;StringdetailStr=null;MapString,IntegerorderDetail=newHashMap();for(inti=0;idatas.size();i++){temp1=datas.get(i).split(,);for(intj=0;jtemp1.length;j++){temp2=temp1[j].split(:);if(temp2.length==2){if(orderDetail.get(temp2[0])!=null){orderDetail.put(temp2[0],Integer.parseInt(temp2[1])+orderDetail.get(temp2[0]));}else{orderDetail.put(temp2[0],Integer.parseInt(temp2[1]));}}}}returnorderDetail;}privateMapString,IntegerresolveDishesDatas(ListStringdatas){MapString,IntegerdishesDetail=newHashMap();Stringtemp[]=null;for(inti=0;idatas.size();i++){temp=datas.get(i).split(:);if(temp.length==2){dishesDetail.put(temp[0],Integer.parseInt(temp[1]));}}returndishesDetail;}}4.设计学生类Student,属性:学号(整型);姓名(字符串),选修课程(名称)及课程成绩(整型)。编写一个控制台程序,能够实现Student信息的保存、读取。具体要求:(1)提供Student信息的保存功能:通过控制台输入若干个学生的学号、姓名以及每个学生所修课程的课程名和成绩,将其信息保存到data.dat中;(2)数据读取显示:能够从data.dat文件中读取学生及其课程成绩并显示于控制台。packageshiyanwu4;publicclassStudent{privateintnumber;privateStringname;privateStringcourseName;privateintscore;publicintgetNumber(){returnnumber;}publicvoidsetNumber(intnumber){this.number=number;}publicStringgetName(){r