7 Java IO技术及应用Word下载.docx
《7 Java IO技术及应用Word下载.docx》由会员分享,可在线阅读,更多相关《7 Java IO技术及应用Word下载.docx(33页珍藏版)》请在冰豆网上搜索。
dir.mkdir();
//创建该目录,要求io前的所有目录都是存在。
否则用midirs
//Filedirs=newFile("
\\io\\file"
//dirs.mkdirs();
Filefile_1=newFile("
\\io\\1.txt"
try{
file_1.createNewFile();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
Filefile_2=newFile("
"
2.txt"
try{
file_2.createNewFile();
Filefile_3=newFile(dir,"
3.txt"
//创建一个文件,在dir所表示的目录下。
file_3.createNewFile();
Filefile_4=newFile("
iofile/4.txt"
//工程中首先存在iofile文件夹(创建一个Folder)
file_4.createNewFile();
}
}
File类中的成员方法应用:
packagecom.px1987.ioapp.demo;
importjava.io.FilenameFilter;
import.URI;
import.URL;
publicclassFileMethodDemo{
/**
*@paramargs
*/
Filefile=newFile("
io/1.txt"
System.out.println(file.isAbsolute());
System.out.println(file.isDirectory());
System.out.println(file.isFile());
System.out.println(file.isHidden());
//以上判断file所表达的文件或目录是绝对路径吗?
是目录吗?
是文件吗?
是隐藏的吗?
System.out.println(file.canRead());
System.out.println(file.canWrite());
//以上判断file所表达的文件或目录是可读?
可写?
//file.delete();
//file.deleteOnExit();
////后者为应用程序退出时,删除文件
File.createTempFile("
file"
"
temp"
newFile("
io"
));
//创建临时文件,前者默认的目录中;
后者在指定的目录中。
System.out.println(file.exists());
//判断文件是否存在
System.out.println(file.getAbsolutePath());
FiledirAbsolute=file.getAbsoluteFile();
System.out.println(dirAbsolute.toString());
//以文件或字符串的形式返回绝对路径
System.out.println(file.getPath());
//返回file对象的表示的路径,绝对或相对得看声明的时候用的是哪一种?
file.getParent();
Filedir=file.getParentFile();
System.out.println(dir.toString());
//以文件或字符串的形式返回父路径名,绝对或相对得看声明的时候用的是哪一种?
//file.lastModified();
//file.exists();
//file.setReadOnly();
//file.getName();
//file.renameTo(newFile("
io/dest.txt"
));
//注意文件的扩展名别隐藏
//file.length();
//URIuri=file.toURI();
//URLurl=file.toURL();
String[]name=dir.list();
for(Stringi:
name){
System.out.println(i);
String[]nameTxt=dir.list(newFilenameFilter(){
publicbooleanaccept(Filedir,Stringname){
//TODOAuto-generatedmethodstub
if(name.endsWith("
.txt"
)){
returntrue;
}else{
returnfalse;
}
}
});
nameTxt){
//过滤出某文件夹下的文件名,或按要求过滤,返回字符串数组
//dir.listFiles();
//dir.listFiles(filter);
//以文件数组的形式返回结果
7.2JavaIO流类
1、IO流的概念
流:
有序的、无间隔的二进制序列。
Java程序通过流来完成输入/输出。
流是生产或消费信息的抽象。
流通过Java的输入/输出系统与物理设备链接。
一个输入流能够抽象多种不同类型的输入:
从磁盘文件、从键盘或从网络套接字。
同样,一个输出流也可以输出到控制台、磁盘文件或相连的网络。
流是处理输入/输出的一个统一的方法。
缓冲区:
暂时存放数据,提高读写效率
2.JavaIO流类的分类
(1)字节流:
读或写按照字节单元操作,在顶层有两个抽象类:
InputStream和OutputStream。
(2)字符流:
读或写按照字符单元操作,在顶层有两个抽象类:
Reader和Writer。
输入流创建时,已经固定数据源。
输出流创建时,已经固定数据汇。
因此操作步骤如下:
输入端:
1创建输入缓冲区(确定数据源是什么?
)
2读取该缓冲区数据
3关闭缓冲区
输出端:
1创建输出缓冲区(确定数据汇是什么?
2向该缓冲区写数据
3刷新缓冲区
4关闭缓冲区
7.3JavaIO流中的字节流
1、字节流
字节流类为处理字节式输入/输出提供了丰富的环境。
一个字节流可以和其他任何类型的对象并用,包括二进制数据。
这样的多功能性使得字节流对很多类型的程序都很重要。
因为字节流类以InputStream和OutputStream为顶层。
2、InputStream(输入流)
InputStream是一个定义了Java流式字节输入模式的抽象类,该类的所有方法在出错条件下引发一个IOException异常。
3、OutputStream(输出流)
OutputStream是定义了流式字节输出模式的抽象类。
该类的所有方法返回一个void值并且在出错情况下引发一个IOException异常。
4、FileInputStream(本地文件输入流)
FileInputStream类创建一个能从文件读取字节的InputStream类,它的两个常用的构造方法如下:
●FileInputStream(Stringfilepath)
●FileInputStream(FilefileObj)
它们都能引发FileNotFoundException异常。
这里,filepath是文件的全称路径,fileObj参数是描述该文件的File对象。
下面的例子创建了两个使用同样磁盘文件且各含一个上述构造函数的FileInputStreams类:
FileInputStreamf0=newFileInputStream("
/autoexec.bat"
Filef=newFile("
FileInputStreamf1=newFileInputStream(f);
尽管第一个构造函数可能更常用到,第二个构造函数允许在把文件赋给输入流之前用;
当一个FileInputStream被创建时,它可以被公开读取。
5、FileOutputStream(本地文件输出流)
FileOutputStream创建了一个可以向文件写入字节的类OutputStream,它常用的构造方法如下:
●FileOutputStream(StringfilePath)
●FileOutputStream(FilefileObj)
●FileOutputStream(StringfilePath,booleanappend)
它们可以引发IOException或SecurityException异常。
这里filePath是文件的全称路径,fileObj是描述该文件的File对象。
如果append为true,文件以设置搜索路径模式打开。
FileOutputStream的创建不依赖于文件是否存在。
在创建对象时,FileOutputStream在打开输出文件之前创建它。
这种情况下如果试图打开一个只读文件,会引发一个IOException异常。
6、本地文件流
Java为我们提供了一系列的读写文件的类和方法,。
在Java中,所有的文件都是字节形式的。
Java提供从文件读写字节的方法。
两个最常用的流类是FileInputStream和FileOutputStream,它们生成与文件链接的字节流。
下面是我们将要用到的两个流类的构造方法形式:
●FileInputStream(StringfileName)throwsFileNotFoundException
●FileOutputStream(StringfileName)throwsFileNotFoundException
这里,fileName指定需要打开的文件名。
当你创建了一个输入流而文件不存在时,引发FileNotFoundException异常。
对于输出流,如果文件不能生成,则引发FileNotFoundException异常。
如果一个输出文件被打开,所有原先存在的同名的文件被破坏。
当我们对文件的操作结束后,需要调用close()来关闭文件。
该方法在FileInputStream和FileOutputStream中都有定义。
如下:
voidclose()throwsIOException
读文件,可以使用在FileInputStream中定义的read()方法。
我们用到的如下:
intread()throwsIOException
该方法每次被调用,它仅从文件中读取一个字节并将该字节以整数形式返回。
当读到文件尾时,read()返回-1。
该方法可以引发IOException异常。
下面的程序用read()来输入和显示文本文件的内容,该文件名以命令行形式指定。
注意try/catch块处理程序运行时可能发生的两个错误——未找到指定的文件或用户忘记包括文件名了。
当我们用命令行时也可以用这样的方法。
importjava.io.*;
classShowFile{
publicstaticvoidmain(Stringargs[])throwsIOException{
inti;
FileInputStreamfin;
try{
fin=newFileInputStream(args[0]);
}
catch(FileNotFoundExceptione){
System.out.println("
FileNotFound"
return;
catch(ArrayIndexOutOfBoundsExceptione){
Usage:
ShowFileFile"
do{
i=fin.read();
if(i!
=-1)
System.out.print((char)i);
}while(i!
=-1);
fin.close();
向文件中写数据,需用FileOutputStream定义的write()方法。
它的最简单形式如下:
voidwrite(intbyteval)throwsIOException
该方法按照byteval指定的数向文件写入字节。
尽管byteval作为整数声明,但仅低8位字节可以写入文件。
如果在写的过程中出现问题,一个IOException被引发。
下面的例子用write()拷贝一个文本文件:
classCopyFile{
FileInputStreamfin;
FileOutputStreamfout;
//openinputfiletry{
InputFileNotFound"
//openoutputfile
fout=newFileOutputStream(args[1]);
ErrorOpeningOutputFile"
CopyFileFromTo"
//CopyFile
fout.write(i);
while(i!
catch(IOExceptione){
System.out.println("
FileError"
fout.close();
7.4JavaIO流中的文本字符流
尽管字节流提供了处理任何类型输入/输出操作的足够的功能,它们不能直接操作Unicode字符。
字符流层次结构的顶层是Reader和Writer抽象类。
1、Reader类
Reader是定义Java的流式字符输入模式的抽象类,该类的所有方法在出错情况下都将引发IOException。
2、Writer
Writer是定义流式字符输出的抽象类。
所有该类的方法都返回一个void值并在出错条件下引发IOException异常。
3、字符文件输入流FileReader类
FileReader类创建了一个可以读取文件内容的Reader类。
它最常用的构造方法显示如下:
●FileReader(StringfilePath)
●FileReader(FilefileObj)
每一个都能引发一个FileNotFoundException异常。
这里,filePath是一个文件的完整路径,fileObj是描述该文件的File对象。
下面的例子演示了怎样从一个文件逐行读取并把它输出到标准输入流。
例子读它自己的源文件,该文件一定在当前目录。
classFileReaderDemo{
publicstaticvoidmain(Stringargs[])throwsException{
FileReaderfr=newFileReader("
FileReaderDemo.java"
BufferedReaderbr=newBufferedReader(fr);
Strings;
while((s=br.readLine())!
=null){
System.out.println(s);
fr.close();
4、字符文件输出流FileWriter类
FileWriter创建一个可以写文件的Writer类。
它最常用的构造方法如下:
●FileWriter(StringfilePath)
●FileWriter(StringfilePath,booleanappend)FileWriter(FilefileObj)
这里,filePath是文件的完全路径,fileObj是描述该文件的File对象。
如果append为true,输出是附加到文件尾的。
FileWriter类的创建不依赖于文件存在与否。
在创建文件之前,FileWriter将在创建对象时打开它来作为输出。
如果我们试图打开一个只读文件,将引发一个IOException异常。
下面的例子是前面讨论FileOutputStream时用到例子的字符流形式的版本。
它创建了一个样本字符缓冲器,开始生成一个String,然后用getChars()方法提取字符数组。
然后该例创建了三个文件。
第一个file1.txt,包含例子中的隔个字符。
第二个file2.txt,包含所有的字符。
最后,第三个文件file3.txt,只含有最后的四分之一。
classFileWriterDemo{
Stringsource="
welcometojava"
;
charbuffer[]=newchar[source.length()];
source.getChars(0,source.length(),buffer,0);
FileWriterf0=newFileWriter("
file1.txt"
for(inti=0;
i<
buffer.length;
i+=2){
f0.write(buffer[i]);
f0.close();
FileWriterf1=newFileWriter("
file2.txt"
f1.write(buffer);
f1.close();
FileWriterf2=newFileWriter("
file3.txt"
f2.write(buffer,buffer.length-buffer.length/4,buffer.length/4);
f2.close();
7.5JavaIO流中的标准预定义流
System同时包含三个预定义的流变量,in,out和err。
这些成员在System中是被定义成public和static型的。
其中System.out是标准的输出流。
默认情况下,它是一个控制台。
Syste