实验七.docx
《实验七.docx》由会员分享,可在线阅读,更多相关《实验七.docx(17页珍藏版)》请在冰豆网上搜索。
![实验七.docx](https://file1.bdocx.com/fileroot1/2023-2/9/73bb6f25-2400-4d1e-98a8-24e26b170bb1/73bb6f25-2400-4d1e-98a8-24e26b170bb11.gif)
实验七
计算机科学与技术系
实验报告
专业名称计算机科学与技术
课程名称JAVA语言程序设计
项目名称JAVA语言的编程环境和开发工具
班级
学号
姓名
实验日期2016/3/7
实验七文件管理与流式文件
1、实验性质:
验证型
2、实验学时:
课后完成
一、实验目的
1.熟悉用文件File类创建、删除、查看文件或目录。
2.字节流、字符流、缓冲流、随机流等流式文件的创建,读写操作。
3.用字符流和缓冲流从键盘接受字符串的方法。
二、实验内容
1.先运行该程序。
源文件是projec3\Ex7_1.java。
然后按【思考问题】分析程序。
importjava.io.*;
publicclassEx7_1
{publicstaticvoidmain(String[]args)throwsException
{FileMypath;
FileInputStreamFin=null;
FileOutputStreamFout=null;
DataInputStreamDin=null;
DataOutputStreamDout=null;
PrintWriterPWout=null;
RandomAccessFileRAread=null;
intx=0;
Mypath=newFile("f:
\\aaaa");
if(!
Mypath.exists())
{System.out.println("创建新目录");Mypath.mkdir();}
elseSystem.out.println("目录已存在");
FileMyfile1=newFile(Mypath,"myfile1.txt");
FileMyfile2=newFile(Mypath,"myfile2.txt");
FileMyfile3=newFile(Mypath,"myfile3.txt");
try{Fout=newFileOutputStream(Myfile1);
Fin=newFileInputStream(Myfile1);
Dout=newDataOutputStream(newFileOutputStream(Myfile2));
Din=newDataInputStream(newFileInputStream(Myfile2));
PWout=newPrintWriter(newFileWriter(Myfile3));
RAread=newRandomAccessFile(Myfile3,"r");
}catch(FileNotFoundExceptione)
{System.out.println("文件未找到"+e.toString());}
Stringstr;
intnum1;
BufferedReaderbuf;
buf=newBufferedReader(newInputStreamReader(System.in));
System.out.print("请输入一个小于255整型数:
");
while(!
(str=buf.readLine()).equalsIgnoreCase("q"))
{System.out.print("请输入另一个小于255整型数,按Q结束:
");
num1=Integer.parseInt(str);
Fout.write(num1);
}Fout.close();
System.out.println("你刚输入的数据是:
");
while((x=Fin.read())!
=-1)
{System.out.println(x);
}Fin.close();
System.out.print("请输入int范围内整型数:
");
while(!
(str=buf.readLine()).equalsIgnoreCase("q"))
{System.out.print("请输入另一个整型数,按Q结束:
");
num1=Integer.parseInt(str);
Dout.writeInt(num1);
}Dout.close();
intleng=Din.available()/4;
intxxx=0;
while(xxx{xxx++;
x=Din.readInt();
System.out.println(x);
}Din.close();
System.out.print("请输入第一个字符串:
");
while((str=buf.readLine())!
=null)
{System.out.print("请输入另一个字符串,按Ctrl+Z结束:
");
PWout.println(str);
}PWout.close();
RAread.seek(0);
while(RAread.getFilePointer(){System.out.println(RAread.readLine());
}RAread.close();
System.out.println("完成");
}//main结束
}//class结束
运行的结果:
创建新目录
请输入一个小于255整型数:
6
请输入另一个小于255整型数:
8
请输入另一个小于255整型数:
9
请输入另一个小于255整型数:
q
你刚才输入的数据是:
6
8
9
请输入int范围内整型数:
12
请输入另一个整型数23
请输入另一个整型数90
请输入另一个整型数Q
12
23
90
请输入第一个字符串:
a
请输入另一个字符串,按Ctrl+Z结束:
b
请输入另一个字符串,按Ctrl+Z结束:
a
b
完成
【思考问题】
1本程序共用到哪几种流式文件?
都用于做什么?
答:
文件输入输出流:
FileInputStream和FileOutputStream;数据输入输出流:
DataOutputStream和DataInputStream;
2运行完程序后,请用“我的电脑”找到创建的文件,并分别打开文件看其内容,你看到的是你输入的数据吗?
答:
myfile1.txt和myfile2.txt不是,myfile3.txt是的
3将创建输入流对象Fin放在输出流Fout前(或用Din与Dout),看发生什么?
答:
结果没变化
4对第一种流式文件,请分别输入:
值>255、值<0的情况进行观察;并且对照第二种情况输入同样数据,你得出什么结论?
答:
FileInputStream和FileOutputStream是字节流类型,数值的范围是:
0到255
5对第二种流式文件判断文件占用字节的长度用available()方法,而此处用intleng=Din.available()/4;为什么除以4?
答:
返回下一次对此输入流调用的方法可以不受阻塞的从此输入流读取(或跳过)的估计剩余字节数
2.按照第1题的内容,三种数据写到三个文件中,写入后然后读出校验。
把所有其它流式文件全部改用随机流式文件来实现。
importjava.io.*;
publicclassEx7_2{
publicstaticvoidmain(Stringargs[])throwsIOException{
FileMypath;
RandomAccessFileFin=null;
PrintWriterFout=null;
RandomAccessFileDin=null;
PrintWriterDout=null;
PrintWriterPWout=null;
RandomAccessFileRAread=null;
intx=0;
Mypath=newFile("f:
\\aaa");
if(!
Mypath.exists()){
System.out.println("创建新目录");
Mypath.mkdir();//创建目录
}else
System.out.println("目录已存在");
FileMyfile1=newFile(Mypath,"myfile1.txt");
FileMyfile2=newFile(Mypath,"myfile2.txt");
FileMyfile3=newFile(Mypath,"myfile3.txt");
try{
Fout=newPrintWriter(newFileWriter(Myfile1));
Fin=newRandomAccessFile(Myfile1,"r");
Dout=newPrintWriter(newFileWriter(Myfile2));
Din=newRandomAccessFile(Myfile2,"r");
PWout=newPrintWriter(newFileWriter(Myfile3));
RAread=newRandomAccessFile(Myfile3,"r");
}catch(FileNotFoundExceptione){
System.out.println("文件未找到"+e.toString());
}
Stringstr;
intnum1;
BufferedReaderbuf;
buf=newBufferedReader(newInputStreamReader(System.in));
System.out.println("请输入一个小于255整型数:
");
while(!
(str=buf.readLine()).equalsIgnoreCase("q")){//以q或Q
System.out.print("请输入另一个小于255整型数:
");
num1=Integer.parseInt(str);
Fout.write(num1);
}
Fout.close();
System.out.println("你刚才输入的数据是:
");
while((x=Fin.read())!
=-1){
System.out.println(x);
}Fin.close();
System.out.print("请输入int范围内整型数:
");
while(!
(str=buf.readLine()).equalsIgnoreCase("q")){
System.out.print("请输入另一个整型数");
num1=Integer.parseInt(str);
Dout.write(num1);
}Dout.close();
intleng=(int)Din.length();
intxxx=0;
while(xxxxxx++;
x=Din.read();
System.out.println(x);
}
Din.close();
System.out.print("请输入第一个字符串:
");
while((str=buf.readLine())!
=null)
{System.out.print("请输入另一个字符串,按Ctrl+Z结束:
");
PWout.println(str);
}PWout.close();
//seek(longpos)设置此文件开头测量到的文件指针偏移量,
//在该位置发生下一个读取或写入操作。
//偏移量的设置可能会超出文件末尾。
偏移量的设置超出文件末尾不会改变文件的长度。
//只有在偏移量的设置超出文件末尾的情况下对文件进行写入才会更改其长度。
RAread.seek(0);
while(RAread.getFilePointer(){System.out.println(RAread.readLine());
}RAread.close();
System.out.println("完成");
}//main结束//class结束
}
【思考问题】
1注意创建随机文件对象对文件原有内容是清除还是保留?
这一点是与其它流式文件很明显的特点,你怎样验证它?
答:
清除,往同一个文件里写东西。
2修改程序要求每次重新运行不覆盖原内容,新的数据填加在文件尾,然后读出校验。
importjava.io.*;
publicclassEx7_2{
publicstaticvoidmain(Stringargs[])throwsIOException{
FileMypath;
RandomAccessFileFin=null;
PrintWriterFout=null;
RandomAccessFileDin=null;
PrintWriterDout=null;
PrintWriterPWout=null;
RandomAccessFileRAread=null;
intx=0;
Mypath=newFile("f:
\\aaa");
if(!
Mypath.exists()){
System.out.println("创建新目录");
Mypath.mkdir();//创建目录
}else
System.out.println("目录已存在");
FileMyfile1=newFile(Mypath,"myfile1.txt");
FileMyfile2=newFile(Mypath,"myfile2.txt");
FileMyfile3=newFile(Mypath,"myfile3.txt");
try{
Fout=newPrintWriter(newFileWriter(Myfile1));
Fin=newRandomAccessFile(Myfile1,"r");
Dout=newPrintWriter(newFileWriter(Myfile2));
Din=newRandomAccessFile(Myfile2,"r");
PWout=newPrintWriter(newFileWriter(Myfile3));
RAread=newRandomAccessFile(Myfile3,"r");
}catch(FileNotFoundExceptione){
System.out.println("文件未找到"+e.toString());
}
Stringstr;
intnum1;
BufferedReaderbuf;
buf=newBufferedReader(newInputStreamReader(System.in));
System.out.println("请输入一个小于255整型数:
");
while(!
(str=buf.readLine()).equalsIgnoreCase("q")){//以q或Q
System.out.print("请输入另一个小于255整型数:
");
num1=Integer.parseInt(str);
Fout.write(num1);
}
Fout.close();
System.out.println("你刚才输入的数据是:
");
while((x=Fin.read())!
=-1){
System.out.println(x);
}Fin.close();
System.out.print("请输入int范围内整型数:
");
while(!
(str=buf.readLine()).equalsIgnoreCase("q")){
System.out.print("请输入另一个整型数");
num1=Integer.parseInt(str);
Dout.write(num1);
}Dout.close();
//返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数。
intleng=(int)Din.length();
intxxx=0;
while(xxxxxx++;
x=Din.read();
System.out.println(x);
}
Din.close();
System.out.print("请输入第一个字符串:
");
while((str=buf.readLine())!
=null)
{System.out.print("请输入另一个字符串,按Ctrl+Z结束:
");
PWout.println(str);
}PWout.close();
//seek(longpos)设置此文件开头测量到的文件指针偏移量,
//在该位置发生下一个读取或写入操作。
//偏移量的设置可能会超出文件末尾。
偏移量的设置超出文件末尾不会改变文件的长度。
//只有在偏移量的设置超出文件末尾的情况下对文件进行写入才会更改其长度。
RAread.seek(0);
while(RAread.getFilePointer(){System.out.println(RAread.readLine());
}RAread.close();
System.out.print("请输入第一个字符串:
");
while((str=buf.readLine())!
=null)
{System.out.print("请输入另一个字符串,按Ctrl+Z结束:
");
PWout.println(str);
}PWout.close();
RAread.seek(RAread.length());
while(RAread.getFilePointer(){System.out.println(RAread.readLine());
}RAread.close();
System.out.println("完成");
}//main结束//class结束
}
3修改程序如果只创建一个文件,三种键盘输入内容都放在同一个文件里,并读出校验。
importjava.io.*;
publicclassEx7_2{
publicstaticvoidmain(Stringargs[])throwsIOException{
FileMypath;
RandomAccessFileFin=null;
PrintWriterFout=null;
RandomAccessFileDin=null;
PrintWriterDout=null;
PrintWriterPWout=null;
RandomAccessFileRAread=null;
intx=0;
Mypath=newFile("f:
\\aaa");
if(!
Mypath.exists()){
System.out.println("创建新目录");
Mypath.mkdir();//创建目录
}else
System.out.println("目录已存在");
FileMyfile1=newFile(Mypath,"myfile1.txt");
FileMyfile2=newFile(Mypath,"myfile1.txt");
FileMyfile3=newFile(Mypath,"myfile1.txt");
try{
Fout=newPrintWriter(newFileWriter(Myfile1));
Fin=newRandomAccessFile(Myfile1,"rw");
Dout=newPrintWriter(newFileWriter(Myfile2));
Din=newRandomAccessFile(Myfile1,"rw");
PWout=newPrintWriter(newFileWriter(Myfile3));
RAread=newRandomAccessFile(Myfile1,"rw");
}catch(FileNotFoundExceptione){
System.out.println("文件未找到"+e.toString());
}
Stringstr;
intnum1;
BufferedReaderbuf;
buf=newBufferedReader(newInputStreamReader(System.in));
System.out.println("请输入一个小于255整型数:
");
while(!
(str=buf.readLine()).equalsIgnoreCase("q")){//以q或Q
System.out.print("请输入另一个小于255整型数:
");
num1=Integer.parseInt(str);
Fout.write(num1);
}
Fout.close();
System.out.println("你刚才输入的数据是:
");
while((x=Fin.read())!
=-1){
System.out.println(x);
}Fin.close();
System.out.print("请输入int范围内整型数:
");
while(!
(str=buf.readLine()).equalsIgnoreCase("q")){
System.out.print("请输入另一个整型数");
num1=Integer.parseInt(str);