JAVA针对各种文件操作.docx
- 文档编号:7670680
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:41
- 大小:27.94KB
JAVA针对各种文件操作.docx
《JAVA针对各种文件操作.docx》由会员分享,可在线阅读,更多相关《JAVA针对各种文件操作.docx(41页珍藏版)》请在冰豆网上搜索。
JAVA针对各种文件操作
1、课程名称:
JAVA文件操作
File、输入、输出流、对象序列化
2、知识点
2.1、上次课程的主要知识点
1、String与StringBuffer的区别
•String一旦声明之后内容不可改变,可以直接赋值,连接可以用+号
•StringBuffer的内容可以改变,必须实例化之后赋值
2、Class类的作用
Class表示反射机制,表示一切类的组成
通过Class.forName()可以找到一个类,之后通过newInstance()实例化,但是要求使用此种方式的时候类中必须存在无参构造方法。
3、比较器——Comparable
•用于为一个对象进行排序操作
4、日期操作类:
•SimpleDateFormatàDateà日期显示
5、正则表达式:
•验证字符串的组成
•拆分、替换
6、使用正则验证email地址
publicclassRegDemo{
publicstaticvoidmain(Stringargs[]){
Stringstr="a@";
//comcnnetorgedu
System.out.println(str.matches("\\w+@\\w+.((com)|()|(cn)|(net)|()|(org)|(edu))"));
}
};
2.2、本次预计讲解的知识点
1、File类的作用及使用
2、字节输入流/字节输出流、字符输入流/字符输出流
3、内存操作流
4、打印流
5、对象序列化
3、具体内容
在整个JAVA中所有的文件操作都是使用java.io包完成的,此包中包含了各种操作的类及接口。
IO包中有以下几个主要部分组成:
•表示与文件本身的操作:
File
•IO的输入、输出类
•对象序列化
3.1、File类(重点)
在整个IO包中,File类是唯一表示文件本身的,即:
文件的创建、删除、存在与否的判断。
File类在使用的时候需要指定操作的文件路径,构造方法:
•publicFile(Stringpathname)
例如:
现在使用File类在硬盘上创建一个新的文件(e:
\abc.txt)
•创建文件的方法:
publicbooleancreateNewFile()throwsIOException
importjava.io.*;
publicclassIODemo01{
publicstaticvoidmain(Stringargs[]){
//告诉系统准备操作这样的一个文件
Filef=newFile("e:
\\abc.txt");
try{
System.out.println(f.createNewFile());
}catch(Exceptione){}
}
};
例如:
删除在硬盘上建立好的文件
•删除文件的方法:
publicbooleandelete()
importjava.io.*;
publicclassIODemo02{
publicstaticvoidmain(Stringargs[]){
//告诉系统准备操作这样的一个文件
Filef=newFile("e:
\\abc.txt");
//删除文件
f.delete();
}
};
但是以上有一个问题,至少文件存在之后才可以删除。
证明,在删除之前需要先判断此文件是否存在,判断语法:
publicbooleanexists():
importjava.io.*;
publicclassIODemo03{
publicstaticvoidmain(Stringargs[]){
//告诉系统准备操作这样的一个文件
Filef=newFile("e:
\\abc.txt");
if(f.exists()){
//删除文件
f.delete();
}
}
};
例如:
要求完成以下的功能
•如果文件存在则删除,如果文件不存在则创建
importjava.io.*;
publicclassIODemo04{
publicstaticvoidmain(Stringargs[]){
//告诉系统准备操作这样的一个文件
Filef=newFile("e:
\\abc.txt");
if(f.exists()){
//删除文件
f.delete();
}else{
try{
f.createNewFile();
}catch(Exceptione){}
}
}
};
发现此种操作并不是立刻生效的,有一定时间的延迟。
注意:
如果在程序中直接输出File类的对象,则会打印路径名称。
importjava.io.*;
publicclassIODemo05{
publicstaticvoidmain(Stringargs[]){
//告诉系统准备操作这样的一个文件
Filef=newFile("e:
\\abc.txt");
System.out.println(f);
}
};
输出结果:
e:
\abc.txt
例如:
要求列出一个目录下的所有内容
方法名称如下:
•publicString[]list():
只列出了所有的文件夹或文件的名称,不是绝对路径
•publicFile[]listFiles():
取得的是绝对路径
A、使用list()方法操作:
importjava.io.*;
publicclassIODemo06{
publicstaticvoidmain(Stringargs[]){
//告诉系统准备操作这样的一个文件
Filef=newFile("e:
\\");
Strings[]=f.list();
for(inti=0;i System.out.println(s[i]); } } }; B、使用listFiles()方法操作 importjava.io.*; publicclassIODemo07{ publicstaticvoidmain(Stringargs[]){ //告诉系统准备操作这样的一个文件 Filef=newFile("e: \\"); Filefs[]=f.listFiles(); for(inti=0;i System.out.println(fs[i]); } } }; 例如: 区分一个给定的路径是文件还是文件夹 •方法名称: publicbooleanisDirectory() importjava.io.*; publicclassIODemo08{ publicstaticvoidmain(Stringargs[]){ //告诉系统准备操作这样的一个文件 Filef=newFile("e: \\"); System.out.println(f.isDirectory()); } }; 思考: 任意给定一个路径,要求把此路径下的所有文件包括各个子文件夹的文件全部列出。 •思路: |-通过给定的路径判断是否是一个文件夹 |-如果是一个文件夹,则继续列出里面的内容 |-之后再将此文件夹里面的内容继续判断,观察是否是目录 importjava.io.*; publicclassIODemo09{ publicstaticvoidmain(Stringargs[]){ //告诉系统准备操作这样的一个文件 Filef=newFile("e: \\"); print(f); } publicstaticvoidprint(Filef){ if(f.isDirectory()){ Filefiles[]=f.listFiles(); try{ for(inti=0;i //如果还有子文件夹,则肯定继续列出 print(files[i]); } }catch(Exceptione){} }else{ System.out.println(f); } } }; 3.2、RandomAccessFile类(了解) RandomAccessFile: 实现随机访问,可以在文件之中跳转。 在保存内容的时候,必须指定内容的长度。 现在向文件之中写入如下数据: •zhangsan30 •lisi31 •wangwu32 例如: 通过RandomAccessFile类向文件中保存内容 •构造方法: publicRandomAccessFile(Filefile,Stringmode)throwsFileNotFoundException |-Stringmode: 表示的是文件的打开模式: |-只读: r,但是使用此种方式的时候必须保证文件存在。 |-读写: rw,使用此种方式的时候,向文件中写入数据,如果文件不存在,则会自动创建一个新的文件出来 •向文件中写数据: •向文件中写入字符串: publicfinalvoidwriteBytes(Strings)throwsIOException •向文件中写入数字: publicfinalvoidwriteInt(intv)throwsIOException •文件操作之后必须关闭: •关闭: publicvoidclose()throwsIOException 利用以上方法完成文件的写入,可是写的时候,必须注意,所有的内容长度必须固定。 importjava.io.*; publicclassIODemo10{ publicstaticvoidmain(Stringargs[])throwsException{ Filef=newFile("e: "+File.separator+"hello.txt"); RandomAccessFileraf=null; //如果文件不存在,则会自动创建一个 raf=newRandomAccessFile(f,"rw"); Stringname=null; intage=0; name="zhangsan"; age=30; raf.writeBytes(name); raf.writeInt(age); name="lisi"; age=31; raf.writeBytes(name); raf.writeInt(age); name="wangwu"; age=32; raf.writeBytes(name); raf.writeInt(age); raf.close(); } }; 例如: 通过RandomAccessFile取出里面的内容 •因为是读,所以可以使用只读的方式打开文件: r •读字符串: publicfinalbytereadByte()throwsIOException |-使用byte的方式读取进来 •读数字: publicfinalintreadInt()throwsIOException •跳过指定长度的内容: publicintskipBytes(intn)throwsIOException •跳回位置: publicvoidseek(longpos)throwsIOException importjava.io.*; publicclassIODemo11{ publicstaticvoidmain(Stringargs[])throwsException{ Filef=newFile("e: "+File.separator+"hello.txt"); RandomAccessFileraf=null; //如果文件不存在,则会自动创建一个 raf=newRandomAccessFile(f,"r"); Stringname=null; intage=0; byteb[]=newbyte[8]; //跳过第一个人的信息 raf.skipBytes(12); for(inti=0;i b[i]=raf.readByte(); } age=raf.readInt(); name=newString(b); System.out.println("姓名: "+name); System.out.println("年龄: "+age); raf.seek(0); for(inti=0;i b[i]=raf.readByte(); } age=raf.readInt(); name=newString(b); System.out.println("姓名: "+name); System.out.println("年龄: "+age); raf.close(); } }; 3.3、字节流、字符流操作类(重点) 文件操作的基本流程: 1、通过File类找到一个文件 2、通过File类去实例化字节流、字符流操作类 3、进行读或写的操作,在写的时候如果文件不存在则会自动创建 4、关闭文件 3.3.1、字节流 在字节流中分为两种: •输出流: OutputStream •输入流: InputStream 例如: 向文件之中打印一个“HelloWorld! ! ! ”。 •肯定使用输出流。 定义: publicabstractclassOutputStreamextendsObjectimplementsCloseable,Flushable •OutputStream子类: FileOutputStream 构造方法: publicFileOutputStream(Filefile)throwsFileNotFoundException •输出方法: publicvoidwrite(byte[]b)throwsIOException可以发现只能写出一个byte数组,那么现在是一个字符串,如果要想使用此种方式,需要将一个字符串变为一个byte数组,String中的方法: publicbyte[]getBytes()。 •关闭: publicvoidclose()throwsIOException importjava.io.*; publicclassIODemo12{ publicstaticvoidmain(String[]args){ //通过File找到一个文件 Filef=newFile("e: \\hello.txt"); //输出流操作类 OutputStreamout=null; try{ //通过子类实例化 out=newFileOutputStream(f); }catch(Exceptione){} Stringstr="HelloWorld! ! ! "; byteb[]=str.getBytes(); try{ out.write(b); }catch(Exceptione){} try{ out.close(); }catch(Exceptione){} } } 例如: 既然可以通过OutputStream向文件中写入内容,那么就一定可以从文件中读取内容,使用InputStream读取内容。 •InputStream也是一个抽象类,所以必须使用其子类: FileInputStream •读的方式: •publicintread(byte[]b)throwsIOException |-传入一个byte数组,将所有的内容保存在byte数组之中。 |-此方法返回向数组中写入数据的个数 •将byte数组变为字符串: publicString(byteb[])、publicString(byteb[],intbe,intlen) importjava.io.*; publicclassIODemo13{ publicstaticvoidmain(String[]args){ //通过File找到一个文件 Filef=newFile("e: \\hello.txt"); //输出流操作类 InputStreaminput=null; try{ //通过子类实例化 input=newFileInputStream(f); }catch(Exceptione){} byteb[]=null; intlen=0; try{ b=newbyte[1024]; //把所有的内容读到数组b中 //返回读取的个数 len=input.read(b); }catch(Exceptione){} try{ input.close(); }catch(Exceptione){} System.out.println(newString(b,0,len)); } } •但是读取的时候发现程序中开辟了一个很大的byte数组,不用的空间有些浪费,那能否根据文件的大小开辟呢? •File类中有取得文件长度的方法。 importjava.io.*; publicclassIODemo14{ publicstaticvoidmain(String[]args){ //通过File找到一个文件 Filef=newFile("e: \\hello.txt"); //输出流操作类 InputStreaminput=null; try{ //通过子类实例化 input=newFileInputStream(f); }catch(Exceptione){} byteb[]=null; try{ b=newbyte[(int)f.length()]; //把所有的内容读到数组b中 //返回读取的个数 input.read(b); }catch(Exceptione){} try{ input.close(); }catch(Exceptione){} System.out.println(newString(b)); } } •如果现在不知道文件大小,该怎么读呢? •读取方法: |-publicabstractintread()throwsIOException |-如果读取的内容不是“-1”,就表示还有文件,可以继续读 importjava.io.*; publicclassIODemo15{ publicstaticvoidmain(String[]args){ //通过File找到一个文件 Filef=newFile("e: \\hello.txt"); //输出流操作类 InputStreaminput=null; try{ //通过子类实例化 input=newFileInputStream(f); }catch(Exceptione){} byteb[]=null; try{ b=newbyte[(int)f.length()]; intx=0; intfoot=0; while((x=input.read())! =-1){ b[foot]=(byte)x; foot++; } }catch(Exceptione){ System.out.println(e); } try{ input.close(); }catch(Exceptione){} System.out.println(newString(b)); } } 3.3.2、字符流 一个字符=两个字节。 在字符流操作中,主要使用以下两个类: •字符输出流: Writer •字符输入流: Reader 例如: 向文件中保存一个数据 写内容的方法: publicvoidwrite(Stringstr)throwsIOException importjava.io.*; publicclassIODemo16{ publicstaticvoidmain(String[]args){ //通过File找到一个文件 Filef=newFile("e: \\hello.txt"); //输出流操作类 Writerout=null; try{ //通过子类实例化 out=newFileWriter(f); }catch(Exceptione){} Stringstr="HelloWorld! ! ! "; try{ out.write(str); }catch(Exceptione){} try{ out.close(); }catch(Exceptione){} } } 例如: 从文件中把内容读取进来 读的方法: |-publicintread(char[]cbuf)throwsIOException |-publicintread()throwsIOException importjava.io.*; publicclassIODemo17{ publicstaticvoidmain(String[]args){ //通过File找到一个文件 Filef=newFile("e: \\hello.txt"); //输出流操作类 Re
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 针对 各种 文件 操作