JAVA IO操作实验Word文档格式.docx
《JAVA IO操作实验Word文档格式.docx》由会员分享,可在线阅读,更多相关《JAVA IO操作实验Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
流分为输入流(InputStream)和输出流(OutputStream),在Java中相应提供了两个抽象(abstract)的流操作类InputStream和OutputStream,并且以这些类为基础,派生了许多类用于I/O的具体操作。
在Java.io包中提供了60多个流相关类,从功能上分为:
输入流和输出流;
从流结构上可分为:
字节流和字符流。
I/O操作的一般步骤如下:
1)使用引入语句引入java.io包,importjava.io.*;
2)根据不同的数据源和I/O任务,建立字节或者字符流;
3)若需要对字节或字符流信息组织加工为数据,在已建字节或字符流对象上构建数据流对象;
4)用输入输出对象类的成员方法进行读写操作,需要时设置读写位置指针;
5)关闭流对象。
3.文件压缩
在进行网络传输时,为了得到更快的传输速度,经常将待发送的数据进行压缩。
在java.util.zip类库包中提供了标准读写zip和gzip文件方法。
●ZipFile类用于创建一个压缩文件的描述,类似与File类。
●ZipEntry类用于创建一个压缩文件的入口描述
PublicInputStreamgetInputStream(ZipEntryentry)throwsIOException
遗憾的是,使用Java自带的类java.util.zip进行文件/目录的压缩的话,有一点不足,不支持中文的名件/目录命名,当待压缩文件名称中,出现中文或非ASIIC码字符时,就会出错。
目前一般的Ant.jar类库中也有zip类,importorg.apache.tools.zip.*,能够解决不支持中文文件目录的问题,同时,Ant的获得途径也比较多,一般的应用服务器中有这个包,可在tomcat5.X中找到ant.jar类库包。
三.类及方法
1.File常用方法
boolean
canRead()判断文件是否可读
canWrite()判断文件是否可写
createNewFile()创建新文件
delete()删除文件
File
getAbsoluteFile()获得绝对文件类型
String
getAbsolutePath()获得绝对路径名
getCanonicalFile()获得标准文件类型
getCanonicalPath()获得标准文件路径
getName()获得文件名
getParent()获得父路径名
getPath()获得路径名
isDirectory()判断是否为目录
isFile()判断是否为文件
isHidden()判断是否为隐藏
long
lastModified()最后修改时间
length()获得文件长度
String[]
list()获得目录中文件名列表
list(FilenameFilter
filter)获得目录中指定字符文件列表
File[]
listFiles()列出文件类型列表
mkdir()创建目录
renameTo(File
dest)更改文件名
setLastModified(long
time)更改最后文件修改时间
setReadOnly()设置文件为只读
2.RamdomAccessFile常用方法
void
close()关闭该文件流,释放资源
getFilePointer()获得文件当前指针
int
read()读取数据
read(byte[]
b)读取数据至数组
b,int
off,int
len)读取数据至数组指定位置
readBoolean()读取boolean数据
byte
readByte()读取有符号8bit数据
char
readChar()读取Unicod字符
readFully(byte[]
b)读取数据byte数组
readInt()读取有符号32bitinteger数值
readLine()按行读取数据
readUTF()读取字符串
seek(long
pos)指针跳过指定字符数
setLength(long
newLength)设置文件长度
skipBytes(int
n)跳过指定长度的字节数
write(byte[]
b)保存字节数组至文件
len)保存字节数组指定长度至文件
write(int
b)保存int数值
writeBoolean(boolean
v)保存boolean数值
writeByte(int
v)保存byte数值
writeBytes(String
s)保存字符串数值
writeChar(int
v)保存char数值
writeChars(String
writeInt(int
v)保存int数值
writeUTF(String
str)保存UTF数值
3.FileInputStream常用方法
available()判断该文件是否可读取,
close()关闭输入流
FileDescriptor
getFD()获得输入流的文件描述对象
read()读取一个字节
b)读取一个字节数组
len)读取指定长度的数据到指定数据的位置
skip(long
n)跳过一定数量的字节
4.FileOutputStream常用方法
close()关闭输出流
getFD()获得该流的文件描述对象
b)输出字节数组
len)输出字节数组中指定数据
b)输出一个整数(字符)
5.DataInputStream常用方法
b)从输入流读取数据至字节数组中。
len)从输入流读取数据至字节数组中指定位置和长度。
readBoolean()读取boolean类型数据
readByte()读取byte类型数据
readChar()读取char类型数据
readInt()读取int类型数据
readUTF()读取UTF类型数据
n)在输入流跳过指定长度字节数。
6.DataOutputStream常用方法
flush()立刻输出
size()返回输出流字节数
len)输出数组中指定位置和长度的byte数
b)输出int类型数据
v)输出boolean类型数据
v)输出byte类型数据
s)以字节形式输出String类型数据
v)输出char类型数据
s)输出String类型数据
v)输出int类型数据
str)输出UTF字符串类型数据
7.ZipFile常用方法
close()关闭
Enumeration
entries()返回ZIP文件列表
protected
finalize()保证ZIP操作正确完成
ZipEntry
getEntry(String
name)获得ZIP入口
InputStream
getInputStream(ZipEntry
entry)获得ZIP输入流
getName()获得ZIP文件名
size()获得ZIP文件包内被压缩的文件数量
四.基础知识填空
1.在JAVA中定义了三个输入与输出通用的流对象,分别是()、()和()。
2.在JAVA中,File类的作用是(
),RandomAccessFile类的作用是()。
3.在JAVA语言中采用()机制解决输入与输出,流分为()和(),并提供2个抽象的类,分别是()和()。
4.在JAVA语言中,文件输入流类是(),文件输出流类是(),如要要实现合并2个文件,应用使用的类是()。
5.文件压缩是一个经济的文件存储和传输的方法,在JAVA语言中使用了4个类解决对ZIP和GZIP格式压缩文件的操作,分别是(),(),()和()。
五.程序填空
1.通过键盘输入数据
import()
classexp_4_1{
publicstaticvoidmain(Stringargs[])throwsIOException{
BufferedReaderbr=
newBufferedReader(newInputStreamReader());
System.out.print("
输入一个整数:
"
);
Stringstr=br.readLine();
inti=();
输入一个实数:
Stringstr=();
floatf=Float.parseFloat(str);
System.out.println("
它们的和是"
+(i+f));
}
}
2File类方法练习
importjava.io.*;
classexp_4_2{
publicstaticvoidmain(String[]args){
try{
FilemyFile=newFile("
d:
\\f-disk\\test.xml"
System.out.println(myFile.getName()+"
是目录?
+myFile.());
可读/写?
+
myFile.canRead()+"
/"
文件字节长度"
+myFile.length());
System.out.println(_________________);
System.out.println(myFile.getParent());
System.out.println(myFile.getAbsolutePath());
FilenewFile=newFile("
testNew.java"
myFile.renameTo(newFile);
修改该文件名为:
目录中有以下文件:
FilemyDir=newFile(myFile.getParent());
String[]files=myDir.();
for(inti=0;
i<
files.length;
i++){
System.out.println(files[i]);
}catch(Exceptione){
System.err.println(e.toString());
3RandomAccessFile类填空
classexp_4_3{
RandomAccessFilerf=new()("
aaaa.txt"
"
rw"
rf.writeBoolean(true);
rf.writeInt(123456);
rf.()('
j'
rf.()(1234.56);
rf.seek
(1);
//文件指针跳转到1位置
System.out.println(rf.readInt());
System.out.println(rf.readChar());
System.out.println(rf.readDouble());
rf.();
//文件指针跳转到0位置
System.out.println(rf.readBoolean());
//关闭文件
六.实验实例
1.输入字符和数据
//注意C3的输出结果,解释为什么会得到该结果
classexp_4_1a{
try{
intc1=System.in.read();
System.out.println("
c1="
+c1);
charc2=(char)c1;
c2="
+c2);
charc3=(char)System.in.read();
c3="
+c3);
}catch(Exceptione){
System.err.println(e.getMessage());
}
classexp_4_1b{
BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
inti=Integer.parseInt(str);
importjava.util.*;
publicclassexp_4_1c{
publicstaticvoidmain(Stringargs[]){
请输入若干个数,每输入一个数用回车确认"
最后输入一个非数字结束输入操作"
Scannerreader=newScanner(System.in);
doublesum=0;
intm=0;
while(reader.hasNextDouble()){
doublex=reader.nextDouble();
m=m+1;
sum=sum+x;
%d个数的和为%f/n"
m,sum);
%d个数的平均值是%f/n"
m,sum/m);
}}
报告内容:
运行截图
2.显示程序文件当前所在的目录树结构:
Filedir=newFile(System.getProperty("
user.dir"
));
//获得程序当前运行路径
Filefilename=null;
if(dir.isDirectory()){
Directoryof"
+dir);
Stringlisting[]=dir.list();
for(inti=0;
i<
listing.length;
i++){
System.out.println("
\t"
+listing[i]);
filename=newFile(listing[i]);
if(filename.isDirectory()){
Stringlisting2[]=filename.list();
for(intj=0;
j<
listing2.length;
j++){
System.out.println("
+"
\t"
+listing2[j]);
}
}
}
}}}
3.保存数据,发现并修改其中错误
OutputStreamfos=newFileOutputStream("
fib.dat"
DataOutputStreamdos=newDataOutputStream(fos);
inti=1,j=1;
for(intcount=0;
count<
20;
count++){
dos.writeInt(i);
intk=i+j;
i=j;
j=k;
dos.flush();
dos.close();
fos.close();
InputStreamfis=newFileInputStream("
DataInputStreamdis=newDataInputStream(fis);
intk=0;
while(k!
=-1){
k=dis.readInt();
System.out.println(k);
dis.close();
fis.close();
4.合并文件。
//该类提供了对向量的包装,返回根据文件名打开的FileInputStream.
classInputStreamEnumeratorimplementsEnumeration{
PRivateEnumerationfiles;
publicInputStreamEnum