JAVA基础中的IO操作.docx
- 文档编号:24611742
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:27
- 大小:22.42KB
JAVA基础中的IO操作.docx
《JAVA基础中的IO操作.docx》由会员分享,可在线阅读,更多相关《JAVA基础中的IO操作.docx(27页珍藏版)》请在冰豆网上搜索。
JAVA基础中的IO操作
IO:
(重点)
掌握文件的使用(File类的使用)
掌握IO中流的基本应用
掌握System类对IO的支持
对象的序列化问题
IO 分为三大类
文件操作类(File)
字节操作类
字符操作类
File:
是IO操作中唯一代表磁盘本身的操作类,磁盘的路径就是File的对象。
File中定义了一些与平台无关的方法来操作文件,File提供了很多的方法,来创建和删除文件,判断文件是否存在,设置文件的最后修改日期等等。
构造方法:
publicFile(Stringpathname)
创建文件:
publicbooleancreateNewFile()throwsIOException
判断文件是否存在:
publicbooleanexists()
判断是否问文件夹:
publicbooleanisDirectory()
取得路径下面所有的文件夹和文件:
publicString[]list()
创建一个文件夹:
publicbooleanmkdir()
删除文件或文件夹:
publicbooleandelete()
创建一个新文件:
在D:
\SM01Work目录中创建一个文件夹
packagecom.wanczy.jjm;
importjava.io.File;
publicclassDemo01{
publicstaticvoidmain(String[]args){
Filefile=newFile("D:
\\SM01Work\\wanczy");
file.mkdir();//创建文件夹
}
}
在此新建的文件夹中创建jjm.txt文件
packagecom.wanczy.jjm;
importjava.io.File;
importjava.io.IOException;
publicclassDemo01{
publicstaticvoidmain(String[]args)throwsIOException{
Filefile=newFile("D:
\\SM01Work\\wanczy");
file.mkdir();//创建文件夹
Filef=newFile(file.getPath()+"\\jjm.txt");
f.createNewFile();
}
}
在创建文件时,会先判断文件是否存在,如果存在,就不会重新创建
能不能判断文件是否存在呢?
packagecom.wanczy.jjm;
importjava.io.File;
importjava.io.IOException;
publicclassDemo02{
publicstaticvoidmain(String[]args)throwsIOException{
Filef=newFile("D:
\\SM01Work\\wanczy\\jjm.txt");
if(f.exists()){
System.out.println("文件存在");
}else{
System.out.println("文件不存在");
}
}
}
在创建文件的过程中,一般先判断文件是否存在,如果存在,则删除在创建,如果不存在,则直接创建。
packagecom.wanczy.jjm;
importjava.io.File;
importjava.io.IOException;
publicclassDemo03{
publicstaticvoidmain(String[]args)throwsIOException{
Filef=newFile("D:
\\SM01Work\\wanczy\\jjm.txt");
if(f.exists()){
f.delete();
f.createNewFile();
}else{
f.createNewFile();
}
}
}
现在明确通过File可以找到文件,那么能不能使用File取出一个路径下所有的文件呢?
递归:
一个方法自己调用自己
packagecom.wanczy.jjm;
importjava.io.File;
importjava.io.IOException;
publicclassDemo04{
publicstaticvoidmain(String[]args)throwsIOException{
loop("D:
\\SM01Work");
}
publicstaticvoidloop(Stringpath){
Filef=newFile(path);
Strings[]=null;
if(f.isDirectory()){
s=f.list();
for(inti=0;i loop(path+"\\"+s[i]); } }else{ System.out.println(path); } } } 字节流和字符流 在整个IO包中,流的操作分为两种: ·字节流 ·字节输出流: OutputStream ·字节输入流: InputStream ·字符流 ·字符输出流: Writer ·字符输入流: Reader IO基本操作步骤: 在IO操作中完成流的操作必须按照规范的步骤来进行 ·使用File找到一个新的实例 ·使用字节或者字符流来给OutputStream,InputStream、Writer、Reader实例化 ·进行读和写的操作 ·关闭流 OutputStream: publicabstractclassOutputStreamextendsObjectimplementsCloseable,Flushable 通过类的定义可以发现此类是一个抽象类,实例化必须依靠子类。 java.lang.Object java.io.OutputStream 通过类的结构可以看出,此类是字节输出流的最大父类。 如果此时要完成输出到文件的操作(程序中的内容向文件输出),FileOutputStream是针对文件的字节输出流,可以为OutputStream实例化 FileOutputStream: publicFileOutputStream(Filefile) throwsFileNotFoundException 通过FileOutputStream类的构造方法可以看出,只要在构造FileOutputStream对象的使用传入一个文件地址(File实例)就行。 OutputStream提供了写入数据的方法: void write(byte[] b) 将b.length个字节从指定的byte数组写入此输出流。 void write(byte[] b,int off,int len) 将指定byte数组中从偏移量off开始的len个字节写入此输出流。 abstract void write(int b) 将指定的字节写入此输出流。 向文件中输出“HelloWorld” packagecom.wanczy.jjm; importjava.io.File; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.OutputStream; publicclassDemo05{ publicstaticvoidmain(String[]args)throwsIOException{ OutputStreamous=newFileOutputStream(newFile("D: \\SM01Work\\wanczy\\jjm.txt")); Stringstr="HelloWorld"; byteb[]=str.getBytes();//转换字节数组 ous.write(b);//将字节数组写入到流中 ous.close(); } } 以上的操作是全部转换字节数组的形式写入到流中,当然也可以一个一个的写入流中。 packagecom.wanczy.jjm; importjava.io.File; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.OutputStream; publicclassDemo05{ publicstaticvoidmain(String[]args)throwsIOException{ OutputStreamous=newFileOutputStream(newFile("D: \\SM01Work\\wanczy\\jjm.txt")); Stringstr="Welcomecome"; byteb[]=str.getBytes();//转换字节数组 for(inti=0;i ous.write(b[i]);//将字节写入到流中 } ous.close(); } } 但是以上的程序也有一些问题,每次执行完成之后,所有的内容会被新的内容替换,如果是希望在文件中追加内容,怎么办? publicFileOutputStream(Filefile, booleanappend) throwsFileNotFoundException 通过观察构造方法我们得出,可以再构造FileOutputStream的时候加入一个boolean类型的参数即可执行是否为追加,如果将此参数设置为true则表示追加 packagecom.wanczy.jjm; importjava.io.File; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.OutputStream; publicclassDemo07{ publicstaticvoidmain(String[]args)throwsIOException{ OutputStreamous=newFileOutputStream(newFile( "D: \\SM01Work\\wanczy\\jjm.txt"),true);//加入true表示追加 Stringstr="HelloWorld"; byteb[]=str.getBytes();//转换字节数组 ous.write(b);//将字节数组写入到流中 ous.close(); } } 字节输入流: InputStream publicabstractclassInputStreamextendsObjectimplementsCloseable java.lang.Object java.io.InputStream 通过类的定义可以发现,此类同样是字节输入操作的最大的父类。 此类同样是一个抽象类,实例化时必须依靠子类,如果是文件操作的话,则使用FileInputStream: 构造方法: publicFileInputStream(Filefile) throwsFileNotFoundException InputStream的读取数据的方法: int read() 从此输入流中读取一个数据字节。 int read(byte[] b) 从此输入流中将最多b.length个字节的数据读入一个byte数组中。 packagecom.wanczy.jjm; importjava.io.File; importjava.io.FileInputStream; importjava.io.IOException; importjava.io.InputStream; publicclassDemo08{ publicstaticvoidmain(String[]args)throwsIOException{ InputStreamins=newFileInputStream(newFile( "D: \\SM01Work\\wanczy\\jjm.txt"));//加入true表示追加 byteb[]=newbyte[1024]; ins.read(b); System.out.println(newString(b)); ins.close(); } } 通过以上程序是可以将文件中的内容读出,但是使用字节数组长度不易控制,那么现在我们使用另外一个方法,即一个一个的读取。 packagecom.wanczy.jjm; importjava.io.File; importjava.io.FileInputStream; importjava.io.IOException; importjava.io.InputStream; publicclassDemo09{ publicstaticvoidmain(String[]args)throwsIOException{ Filef=newFile( "D: \\SM01Work\\wanczy\\jjm.txt"); InputStreamins=newFileInputStream(f);//加入true表示追加 //一个一个读取 byteb[]=newbyte[(int)f.length()]; for(inti=0;i b[i]=(byte)ins.read(); } System.out.println(newString(b)); ins.close(); } } 字符输出流: Writer java.lang.Object java.io.Writer 通过类的结构可以发现,Writer是字符输出的最大父类。 publicabstractclassWriterextendsObjectimplementsAppendable,Closeable,Flushable 通过类的定义可以发现此类也是一个抽象类,如果要实例化的话,还是要依靠子类,如果是输出到文件,则需要使用其子类: FileWriter FileWriter(File file) 根据给定的File对象构造一个FileWriter对象。 FileWriter(File file,boolean append) 根据给定的File对象构造一个FileWriter对象。 通过Writer中的publicvoidwrite(Stringstr) throwsIOException 方法就可以直接将字符串输出 packagecom.wanczy.jjm; importjava.io.File; importjava.io.FileWriter; importjava.io.IOException; importjava.io.Writer; publicclassDemo10{ publicstaticvoidmain(String[]args)throwsIOException{ Writerw=newFileWriter(newFile( "D: \\SM01Work\\wanczy\\jjm.txt")); w.write("HelloWorld"); w.close(); } } 以上代码同样发现一个问题,文件内容没有追加。 那么要实现追加怎么办? packagecom.wanczy.jjm; importjava.io.File; importjava.io.FileWriter; importjava.io.IOException; importjava.io.Writer; publicclassDemo10{ publicstaticvoidmain(String[]args)throwsIOException{ Writerw=newFileWriter(newFile( "D: \\SM01Work\\wanczy\\jjm.txt"),true); w.write("HelloWorld"); w.close(); } } 字符输入流: Reader 字符输入和字节输入不同在于使用char数组接收数据。 java.lang.Object java.io.Reader 通过类的结构可以发现Reader是字符输入的最大父类, publicabstractclassReaderextendsObjectimplementsReadable,Closeable 通过类的定义可以发现,Reader是抽象类,实例化需要依靠其子类,如果是对文件的操作,则使用其子类FileReader: FileReader(File file)在给定从中读取数据的File的情况下创建一个新FileReader。 Reader读取字符的方法: int read() 读取单个字符。 int read(char[] cbuf) 将字符读入数组。 现在要从文件中读取内容 packagecom.wanczy.jjm; importjava.io.File; importjava.io.FileReader; importjava.io.IOException; importjava.io.Reader; publicclassDemo11{ publicstaticvoidmain(String[]args)throwsIOException{ Readerr=newFileReader(newFile( "D: \\SM01Work\\wanczy\\jjm.txt")); charc[]=newchar[(int)newFile("D: \\SM01Work\\wanczy\\jjm.txt").length()]; r.read(c); System.out.println(newString(c)); r.close(); } } 也可以一个一个的输入: packagecom.wanczy.jjm; importjava.io.File; importjava.io.FileReader; importjava.io.IOException; importjava.io.Reader; publicclassDemo12{ publicstaticvoidmain(String[]args)throwsIOException{ Readerr=newFileReader(newFile( "D: \\SM01Work\\wanczy\\jjm.txt")); charc[]=newchar[(int)newFile("D: \\SM01Work\\wanczy\\jjm.txt").length()]; for(inti=0;i c[i]=(char)r.read(); } System.out.println(newString(c)); r.close(); } } 字节流和字符流有什么区别呢? 在实际开发中使用哪种更好呢? 为了简单的说明问题,现在我们写两个程序,一个是使用字节流向文件输出,一个使用字符流向文件输出。 ·使用字节输出流OutputString packagecom.wanczy.jjm; importjava.io.File; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.OutputStream; publicclassDemo05{ publicstaticvoidmain(String[]args)throwsIOException{ OutputStreamous=newFileOutputStream(newFile("D: \\SM01Work\\wanczy\\jjm.txt")); Stringstr="HelloWorld"; byteb[]=str.getBytes();//转换字节数组 ous.write(b);//将字节数组写入到流中 //ous.close(); } } 在流没有关闭的时候,正常的输出到文件 ·使用字符输出流Writer packagecom.wanczy.jjm; importjava.io.File; importjava.io.FileWriter; importjava.io.IOException; importjava.io.Writer; publicclassDemo10{ publicstaticvoidmain(String[]args)throwsIOException{ Writerw=newFileWriter(newFile( "D: \\SM01Work\\wanczy\\jjm.txt"),true); w.write("HelloWorld"); //w.close(); } } 字符输出流没有关闭时,内
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 基础 中的 IO 操作