实验8 File类与输入输出流.docx
- 文档编号:8702896
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:20
- 大小:140.08KB
实验8 File类与输入输出流.docx
《实验8 File类与输入输出流.docx》由会员分享,可在线阅读,更多相关《实验8 File类与输入输出流.docx(20页珍藏版)》请在冰豆网上搜索。
实验8File类与输入输出流
深圳大学实验报告
课程名称:
JAVA程序设计
实验项目名称:
实验八File类与输入输出流
学院:
专业:
指导教师:
报告人:
学号:
班级:
实验时间:
2017年11月3日星期五
实验报告提交时间:
2017年11月4日星期六
一、实验目的与要求:
(1)了解输入输出流的概念;
(2)掌握File类的使用方法;
(3)掌握文件字符流FileReader、FileWriter与文件字节流FileInputStream、FileOutputStream的使用;
(4)掌握数据流DataInputStream、DataOutputStream,对象流ObjectInputStream、ObjectOutputStream的使用。
二、实验内容
1.(30分)填空题:
第一题:
拷贝图片文件(字节流)
importjava.io.*;
publiccalssCopyExample
{
publicstaticvoidmain(String[]args)throwsIOException{
Filefs=newFile("d:
\\Winter.jpg");//源文件,必须存在
Filefd=newFile("d:
\\summer.jpg");//目标文件,可以不存在
FileInputStreamfis=【newFileInputStream(fs);】//建立连接文件fs的输入流
FileOutputStreamfos=【newFileOutputStream(fd)】;//建立连接文件fd的输出流
【byte[]b=newbyte[1024];】//创建大小为1024的字节数组
while(fis.read(b)!
=-1){
【fos.write(b);】//将字节数组b的内容写入目标文件
}
【fos.close();】//fos关闭;
【fis.close();】//fis关闭;
}
}
第二题:
拷贝文本文件(字符流)
importjava.io.*;
publiccalssCopyExample
{
publicstaticvoidmain(String[]args)throwsIOException{
Filefs=newFile("d:
\\Hello.txt");//源文件,必须存在
Filefd=newFile("d:
\\Hello.cpy");//目标文件,可以不存在
FileReaderfis=【newFileReader(fs);】//建立连接文件fs的输入流
FileWriterfos=【newFileWriter(fd);】//建立连接文件fd的输出流
【char[]b=newchar[1024];】//创建大小为1024的字符数组
while(fis.read(b)!
=-1){
【fos.write(b);】//将字符数组b的内容写入目标文件
}
【fos.close();】//fos关闭;
【fis.close();】//fis关闭;
}
}
2.读取电脑上c:
\ProgramFiless\java\jre8\lib下面所有.jar的文件的信息:
文件名、大小、上一次修改的时间
3.(10分)利用随机函数产生30个0~100之间的整数,写入到文件Myfile.txt中,并在Myfile的最后添上你的学号、姓名;然后再从该文件中读取这些整数并以升序显示。
4.(10分)使用RandomAccessFile类,将Myfile.txt的内容逆序读出。
5.(10分)让用户从键盘输入信息,建立10个Account的对象,将它们写入到文件fileOfAccount.dat中,然后逐个读取出来。
6.(30分)设计一个文件管理程序docuToAcco.java,实现如下功能:
(1)事先录入n个Account的账户数据,写入一个文本文件(同一个账户各数据之间用空格隔开,不同的账户的数据用换行符隔开)。
(2)从文件中读取数据并生成账户对象,用HashSet
读数据利用BufferedRead类;重复数据不能放入集合,需要重写equals和hashCode方法。
方法原型为:
publicbooleanequals(Objectobj){}publicinthashCode(){})。
(3)遍历并显示账户信息(必须使用Iterator
例如:
文件数据为:
(注意:
必须有一个数据是重复的)
账户号姓名余额性别出生日期
80000001zhangsan1000.00true2009-01-02
80000001zhangsan1000.00true2009-01-02
80000003lisi2000.00false2008-11-02
80000005wangwu3000.00true2007-01-20
80000023chenliu5000.00false2008-07-02
80000045huangjiang1234.00true2006-03-09
输出结果可能为:
(HashSet是无序的)
账户号姓名余额性别出生日期
80000001zhangsan1000.00true2009-01-02
80000003lisi2000.00false2008-11-02
80000005wangwu3000.00true2007-01-20
80000023chenliu5000.00false2008-07-02
80000045huangjiang1234.00true2006-03-09
7.(10分)统计一个纯英文文件中的字符数、单词数以及行数。
单词以空格分隔,文件名请作为命令行参数传递,例如你的程序名是calculate.java,被统计的文本是Account.java,那么在命令行输入的命令是:
C:
\>javacalculateAccount.java
输出:
FileAccount.java
2001characters
150words
35lines
三、实验过程及结果
2.
代码如下:
packagecom.bingo.test;
importjava.io.File;
importjava.text.SimpleDateFormat;
importjava.util.Date;
publicclassDemo2_Test{
publicstaticvoidmain(String[]args){
//根据javajre实际存放目录
Stringpath="C:
\\Develop\\Java\\jre1.8\\lib";
Filefile=newFile(path);
File[]list=file.listFiles();
for(Filefile2:
list){
Stringname=file2.getName();
if(name.endsWith(".jar")){
longtime=file2.lastModified();
SimpleDateFormatsdf=newSimpleDateFormat("yyyy/MM/ddHH:
mm:
ss");
Stringstrtime=sdf.format(newDate(file2.lastModified()));
System.out.println("文件名:
"+name);
System.out.println("大小:
"+file2.length());
System.out.println("最近修改时间:
"+strtime);
System.out.println("-----------");
}
}
}
}
运行结果截图如下:
3.
代码如下:
packagecom.bingo.test;
importjava.io.DataInputStream;
importjava.io.DataOutputStream;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.util.Arrays;
importjava.util.Random;
publicclassDemo3_Test{
publicstaticvoidmain(String[]args)throwsIOException{
Randomr=newRandom();
FileOutputStreamfos=newFileOutputStream("Myfile.txt");
DataOutputStreamdos=newDataOutputStream(fos);
for(inti=0;i<30;++i){
dos.writeInt(r.nextInt(101));
}
dos.writeUTF("2014040329");
dos.writeUTF("杨立滨");
FileInputStreamfis=newFileInputStream("Myfile.txt");
DataInputStreamdis=newDataInputStream(fis);
int[]arr=newint[30];
for(inti=0;i<30;++i){
arr[i]=dis.readInt();
}
Arrays.sort(arr);
for(inti:
arr){
System.out.println(i);
}
dis.close();
dos.close();
}
}
运行结果截图如下:
4.代码如下:
packagecom.bingo.test;
importjava.io.File;
importjava.io.IOException;
importjava.io.RandomAccessFile;
publicclassDemo4_Test{
publicstaticvoidmain(String[]args)throwsIOException{
Filefile=newFile("Myfile.txt");
RandomAccessFileraf=newRandomAccessFile(file,"r");
longlen=raf.length();
while(len>0){
len--;
raf.seek(len);
charinteger=(char)raf.readByte();
System.out.print(integer);
}
}
}
5.代码如下:
packagecom.bingo.test;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.ObjectInputStream;
importjava.io.ObjectOutputStream;
importjava.io.OutputStream;
importjava.io.Serializable;
importjava.util.Scanner;
publicclassDemo5_Test{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
ObjectInputStreamois=null;
ObjectOutputStreamoos=null;
try{
Filef=newFile("fileOfAccount.dat");
OutputStreamout=newFileOutputStream(f);
oos=newObjectOutputStream(out);
for(inti=0;i<10;++i){
System.out.println("第["+(i+1)+"]个账户:
");
System.out.println("id:
");
Stringid=sc.nextLine();
System.out.println("姓名:
");
Stringname=sc.nextLine();
System.out.println("余额:
");
doublebalance=sc.nextDouble();
sc.nextLine();
Accountacc=newAccount(id,name,balance);
oos.writeObject(acc);
}
ois=newObjectInputStream(newFileInputStream("fileOfAccount.dat"));
for(inti=0;i<10;++i){
Accountacc=(Account)ois.readObject();
System.out.println(acc);
}
}catch(Exceptione){
e.printStackTrace();
}finally{
//关流释放资源
if(oos!
=null){
try{
oos.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
if(ois!
=null){
try{
ois.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
}
classAccountimplementsSerializable{
privateStringid;
privateStringname;
privatedoublebalance;
publicAccount(Stringid,Stringname,doublebalance){
super();
this.id=id;
this.name=name;
this.balance=balance;
}
publicStringgetId(){
returnid;
}
publicvoidsetId(Stringid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicdoublegetBalance(){
returnbalance;
}
publicvoidsetBalance(doublebalance){
this.balance=balance;
}
@Override
publicStringtoString(){
return"Account[id="+id+",name="+name+",balance="+balance+"]";
}
}
运行效果截图如下:
6.代码如下:
packagecom.bingo.jdbc.test;
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.FileReader;
importjava.io.IOException;
importjava.io.OutputStreamWriter;
importjava.io.PrintWriter;
importjava.util.ArrayList;
importjava.util.HashSet;
importjava.util.Scanner;
publicclassdocuToAcco{
privatefinalstaticStringfileName="D:
\\docuToAcco.txt";
privatefinalstaticStringtype="UTF-8";
publicstaticvoidmain(String[]args)throwsIOException{
read();
}
publicstaticvoidwrite()throwsIOException{
Scannersc=newScanner(System.in);
Stringname;
Stringid;
doublebalance;
Stringsex;
Stringbirth;
ArrayList
System.out.println("请输入账号ID:
");
while(!
(id=sc.next()).equals("0")){
System.out.println("请输入账号姓名:
");
name=sc.next();
System.out.println("请输入账号余额:
");
balance=sc.nextDouble();
System.out.println("请输入账号性别:
");
sex=sc.next();
System.out.println("请输入账号生日:
");
birth=sc.next();
System.out.println("请输入账号ID:
");
list.add(newAccount(id,name,balance,sex,birth));
}
FileOutputStreamfos=newFileOutputStream(newFile(fileName));
OutputStreamWriterosw=newOutputStreamWriter(fos,type);
PrintWriterpw=newPrintWriter(osw,true);
pw.println("账户号姓名余额性别出生日期");
for(Accountitem:
list){
pw.println(item);
}
pw.close();
osw.close();
fos.close();
}
publicstaticvoidread()throwsIOException{
Scannersc=newScanner(newBufferedReader(newFileReader(fileName)));
HashSet
Stringname;
Stringid;
doublebalance;
Stringsex;
Stringbirth;
sc.nextLine();
while(sc.hasNext()){
id=sc.next();
name=sc.next();
balance=sc.nextDouble();
sex=sc.next();
birth=sc.next();
read.add(newAccount(id,name,balance,sex,birth));
}
for(Accountitem:
read){
System.out.println(item);
}
sc.close();
}
}
classAccount{
privateStringid;
privateStringname;
privatedoublebalance;
privateStringsex;
privateStringbirth;
publicStringgetId(){
returnid;
}
publicvoidsetId(Stringid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicdoublegetBalance(){
returnbalance;
}
publicvoidsetBalance(doublebalance){
this.balance=balance;
}
publicStringgetSex(){
returnsex;
}
publicvoidsetSex(Stringsex){
this.sex=sex;
}
publicString
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验8 File类与输入输出流 实验 File 输入输出
![提示](https://static.bdocx.com/images/bang_tan.gif)