java 实验报告.docx
《java 实验报告.docx》由会员分享,可在线阅读,更多相关《java 实验报告.docx(25页珍藏版)》请在冰点文库上搜索。
java实验报告
实验1分析成绩单
一、实验目的:
掌握字符输入、输出流用法。
二、实验代码:
Fenxi:
importjava.util.*;
publicclassFenxi{
publicstaticdoublegetTotalScore(Strings){
Scannerscanner=newScanner(s);
scanner.useDelimiter("[^0123456789.]+");
doubletotalScore=0;
while(scanner.hasNext()){
try{
doublescore=scanner.nextDouble();
totalScore=totalScore+score;
}
catch(InputMismatchExceptionexp){
Stringt=scanner.next();
}
}
returntotalScore;
}
}
AnalysisResult:
importjava.io.*;
importjava.util.*;
publicclassAnalysisResult{
publicstaticvoidmain(Stringargs[]){
FilefRead=newFile("score.txt");
FilefWrite=newFile("scoreAnalysis.txt");
try{
Writerout=newFileWriter(fWrite,true);//以尾加方式创建指向文件fWrite的out流
BufferedWriterbufferWrite=newBufferedWriter(out);//创建指向out的bufferWrite流
Readerin=newFileReader(fRead);//创建指向文件fRead的in流
BufferedReaderbufferRead=newBufferedReader(in);//创建指向in的bufferRead流
Stringstr=null;
while((str=bufferRead.readLine())!
=null){
doubletotalScore=Fenxi.getTotalScore(str);
str=str+"总分:
"+totalScore;
System.out.println(str);
bufferWrite.write(str);
bufferWrite.newLine();
}
bufferRead.close();
bufferWrite.close();
}
catch(IOExceptione){
System.out.println(e.toString());
}
}
}
三、结果截图:
四、实验分析:
(1)改进程序,使得能统计出每个学生的平均成绩。
答:
(2)现在有如下格式的货物明细(文本格式)goods.txt
品名:
电视,length:
102cm,width:
89cm,height:
56cm.
品名:
轿车,length:
4502cm,width:
178cm,height:
156cm.
品名:
桌子,length:
125cm,width:
78cm,height:
68cm.
答:
CalculateVolume.java
importjava.io.*;
importjava.util.*;
publicclassCalculateVolume{
publicstaticvoidmain(Stringargs[]){
FilefRead=newFile("goods.txt");
FilefWrite=newFile("goodsVolume.txt");
try{Writerout=newFileWriter(fWrite,true);
BufferedWriterbufferWrite=newBufferedWriter(out);
Readerin=newFileReader(fRead);
BufferedReaderbufferRead=newBufferedReader(in);
Stringstr=null;
while((str=bufferRead.readLine())!
=null){
doubles=Jisuan.getVolume(str);
str=str+"体积:
"+s+"cm^3";
System.out.println(str);
bufferWrite.write(str);
bufferWrite.newLine();
}
bufferRead.close();
bufferWrite.close();
}
catch(IOExceptione){
System.out.println(e.toString());
}
}
}
Jisuan.java
importjava.util.*;
publicclassJisuan{
publicstaticdoublegetVolume(Strings){
Scannerscanner=newScanner(s);
scanner.useDelimiter("[^0123456789.]+");
doublevolume=1;
while(scanner.hasNext()){
try{
doubledistance=scanner.nextDouble();
volume=volume*distance;
}
catch(InputMismatchExceptionexp){
Stringt=scanner.next();
}
}
returnvolume;
}
}
实验2统计英文单词
一、实验目的:
掌握使用Scanner类解析文件。
二、实验代码:
Dictionary.java:
importjava.util.*;
publicclassDictionary{
publicstaticvoidmain(Stringargs[]){
VectorallWord,noSameWord;
WordStatisticstatistic=newWordStatistic();
statistic.setFileName("hello.txt");
statistic.wordStatistic();//statistic调用WordStatistic()方法
allWord=statistic.getAllWord();
noSameWord=statistic.getNoSameWord();
System.out.println("共有"+allWord.size()+"个英文单词");
System.out.println("有"+noSameWord.size()+"个互不相同英文单词");
System.out.println("按字典顺序排列:
");
Strings[]=newString[noSameWord.size()];
for(inti=0;is[i]=noSameWord.elementAt(i);
}
Arrays.sort(s);
for(inti=0;iSystem.out.println(s[i]+"");
}
}
}
OutputWordMess.java:
importjava.util.*;
publicclassOutputWordMess{
publicstaticvoidmain(Stringargs[]){
VectorallWord,noSameWord;
WordStatisticstatistic=newWordStatistic();
statistic.setFileName("hello.txt");
statistic.wordStatistic();//statistic调用WordStatistic()方法
allWord=statistic.getAllWord();
noSameWord=statistic.getNoSameWord();
System.out.println("共有"+allWord.size()+"个英文单词");
System.out.println("有"+noSameWord.size()+"个互不相同英文单词");
System.out.println("按出现频率排列:
");
intcount[]=newint[noSameWord.size()];
for(inti=0;iStrings1=noSameWord.elementAt(i);
for(intj=0;jStrings2=allWord.elementAt(j);
if(s1.equals(s2))
count[i]++;
}
}
for(intm=0;mfor(intn=m+1;nif(count[n]>count[m]){
Stringtemp=noSameWord.elementAt(m);
noSameWord.setElementAt(noSameWord.elementAt(n),m);
noSameWord.setElementAt(temp,n);
intt=count[m];
count[m]=count[n];
count[n]=t;
}
}
}
for(intm=0;mdoublefrequency=(1.0*count[m])/allWord.size();
System.out.printf("%s:
%-7.3f",noSameWord.elementAt(m),frequency);
}
}
}
WordStatistic.java:
importjava.io.*;
importjava.util.*;
publicclassWordStatistic{
VectorallWord,noSameWord;
Filefile=newFile("english.txt");
Scannersc=null;
Stringregex;
WordStatistic(){
allWord=newVector();
noSameWord=newVector();//regex是由空格·数字和符号(!
"#$&'()*+,-./:
;<=>?
@[\]^_`{|}~)组成的正则表达式
regex="[\\s\\d\\p{Punct}]+";
try{
sc=newScanner(file);//创建指向file的sc
sc.useDelimiter(regex);//sc调用useDelimiter(Stringregex)方法,向参数传递regex
}
catch(IOExceptionexp){
System.out.println(exp.toString());
}
}
voidsetFileName(Stringname){
file=newFile(name);
try{
sc=newScanner(file);
sc.useDelimiter(regex);
}
catch(IOExceptionexp){
System.out.println(exp.toString());
}
}
publicvoidwordStatistic(){
try{
while(sc.hasNext()){
Stringword=sc.next();
allWord.add(word);
if(!
noSameWord.contains(word))
noSameWord.add(word);
}
}
catch(Exceptione){}
}
publicVectorgetAllWord(){
returnallWord;
}
publicVectorgetNoSameWord(){
returnnoSameWord;
}
}
三、结果截图:
四、实验分析:
按字典顺序输出全部不相同的单词。
答:
Dictionary.java
importjava.util.*;
publicclassDictionary{
publicstaticvoidmain(Stringargs[]){
VectorallWord,noSameWord;
WordStatisticstatistic=newWordStatistic();
statistic.setFileName("hello.txt");
statistic.wordStatistic();//statistic调用WordStatistic()方法
allWord=statistic.getAllWord();
noSameWord=statistic.getNoSameWord();
System.out.println("共有"+allWord.size()+"个英文单词");
System.out.println("有"+noSameWord.size()+"个互不相同英文单词");
System.out.println("按字典顺序排列:
");
Strings[]=newString[noSameWord.size()];
for(inti=0;is[i]=noSameWord.elementAt(i);
}
Arrays.sort(s);
for(inti=0;iSystem.out.println(s[i]+"");
}
}
}
实验3读取压缩文件
一、实验目的:
掌握ZipInputStream流的使用。
二、实验代码:
importjava.io.*;
importjava.util.zip.*;
publicclassReadZipFile{
publicstaticvoidmain(Stringargs[]){
Filef=newFile("book.zip");
Filedir=newFile("mybook");
byteb[]=newbyte[100];
dir.mkdir();
try{
ZipInputStreamin=newZipInputStream(newFileInputStream(f));
ZipEntryzipEntry=null;
while((zipEntry=in.getNextEntry())!
=null){
Filefile=newFile(dir,zipEntry.getName());
FileOutputStreamout=newFileOutputStream(file);
intn=-1;
System.out.println(file.getAbsolutePath()+"的内容:
");
while((n=in.read(b,0,100))!
=-1){
Stringstr=newString(b,0,n);
System.out.println(str);
out.write(b,0,n);
}
out.close();
}
in.close();
}
catch(IOExceptionee){
System.out.println(ee);
}
}
}
三、结果截图:
四、实验分析:
编写一个GUI程序,提供一个对话框,用户可以使用这个对话框选择要解压缩的Zip文件,设置解压后所得到的文件的存放目录。
答:
importjava.io.*;
importjava.util.zip.*;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassMyFrameextendsJFrameimplementsActionListener{
privatestaticfinallongserialVersionUID=1L;
privateJFileChooserfileChooser=newJFileChooser(".");
privateJButtonbutton=newJButton("打开想要解压文件");
publicMyFrame(){
this.setTitle("解压");
this.setPreferredSize(newDimension(500,400));
this.getContentPane().add(button,BorderLayout.CENTER);
button.addActionListener(this);
this.pack();
this.setLocationRelativeTo(null);
this.setIgnoreRepaint(true);
}
publicvoidactionPerformed(ActionEvente){
Objectsource=e.getSource();
if(sourceinstanceofJButton){
openFile();
}
}
publicvoidopenFile(){
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fileChooser.setDialogTitle("打开Zip文件夹");
intret=fileChooser.showOpenDialog(null);
if(ret==JFileChooser.APPROVE_OPTION){
System.out.println(fileChooser.getSelectedFile().getAbsolutePath());
Filef=newFile("book.zip");
Filedir=newFile("mybook");
byteb[]=newbyte[100];
dir.mkdir();
try{ZipInputStreamin=newZipInputStream(newFileInputStream(f));
ZipEntryzipEntry=null;
while((zipEntry=in.getNextEntry())!
=null){
Filefile=newFile(dir,zipEntry.getName());
FileOutputStreamout=newFileOutputStream(file);
intn=-1;
System.out.println(file.getAbsolutePath()+"的内容:
");
while((n=in.read(b,0,100))!
=-1){
Stringstr=newString(b,0,n);
System.out.println(str);
out.write(b,0,n);
}
out.close();
}
in.close();
}
catch(IOExceptionee){
System.out.println(ee);
}
}
}
publicstaticvoidmain(String[]args){
Frameframe=newMyFrame();
frame.setVisible(true);
}
}
补充1、用命令行带参的方式实现dir命令的功能,不带参数表示查询当前目录,带参数表示查询指定的目录,如dirc:
\,并支持dir*.java的文件后缀过滤功能。
答:
Dir.java
importjava.io.*;
importjava.util.*;
importjava.text.*;
publicclassDir{
publicvoidGoBack(){
this.dir(System.getProperty("user.dir"),1);
}
publicvoidGoBack(Stringuserdir){
if(userdir.equals("*.java")){
this.dir(System.getProperty("user.dir"),0);
}
else{
this.dir(userdir,1);
}
}
publicvoiddir(Stringstr,intm){
Stringdi