Java基础文档格式.docx
《Java基础文档格式.docx》由会员分享,可在线阅读,更多相关《Java基础文档格式.docx(21页珍藏版)》请在冰点文库上搜索。
父目录:
"
+f1.getParent());
文件长度:
+f1.length());
booleanb=f2.exists();
if(b){
f2.delete();
//删除文件
}
if(!
f3.exists()){
dir.mkdir();
//新建目录
f3.createNewFile();
//新建空白文件
System.out.println("
指定目录不存在新建了"
+f3.getAbsolutePath());
}else{
System.out.println(f3.getAbsolutePath());
//获取文件的绝对路径
f3长度:
+f3.length());
f3最后修改时间:
+newDate(f3.lastModified()));
f3是否为目录:
+f3.isDirectory());
dri是否为目录:
+dir.isDirectory());
}
//递归获取文件信息
publicvoiddoFile(Filefile){
if(file.exists()){
if(file.isDirectory()){
File[]fs=file.listFiles();
//获取文件夹下的文件及子目录列表
for(Filef:
fs){
if(f.isFile()){
System.out.println(f.getAbsolutePath());
}else{
doFile(f);
//如果是目录则递归
}
}
}else{
System.out.println(file.getAbsolutePath());
}
}else{
文件未找到..."
publicstaticvoidmain(String[]args)throwsIOException{
FileDemodemo=newFileDemo();
demo.doOne();
======================="
demo.doFile(newFile("
\\MyDocuments\\J2EE\\eclipseworkspace\\JavaOOPDemo"
));
}
流的概念
流指数据通信通道
当程序需要读取数据的时候,
就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。
类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流
JAVA定义了两种类型的流:
字节流和字符流
字节流为处理字节的输入和输出提供了方法,用于读写二进制等数据
字符流为处理字符的输入和输出提供方法,它们采用Unicode能够国际化
字节流:
输入字节流
InputStream(abstract)
|
|--------FileInputStream
|
|--------ObjectInputStream
|--------FilterInputStream
|--------DataInputStream
|--------BufferedInputStream
输出字节流
OutputStream(abstract)
|--------FileOutputStream
|--------ObjectOutputStream
|--------FilterOutputStream
|--------DataOutputStream
|--------BufferedOutputStream
|--------PrintStream
InputStream
InputStream类是所有输入字节流类的abstract基类
常用方法
intavailable()返回当前可读的输入字节数。
voidclose()关闭输入流
intread()从输入流读取下一个数据字节,
返回一个整数。
如果到了文件的末尾,则返回-1
intread(byte[]
b)
从输入流中读取一定数量的字节并将其存储在字节数组b中
b,intbegin,intlength)
从输入流中从开始位置读取长度为length的字节
并将其存储在字节数组b中
OutputStream
所有输出字节流类的abstract基类
voidclose()关闭输出流
voidflush()清空输出缓冲区。
voidwrite(byte[]b)将b.length个字节从指定的字节数组写入此输出流。
voidwrite(byte[]b,intoff,intlen)
将指定字节数组中从偏移量off开始的len个字节写入此输出流。
voidwrite(intb)
将指定的字节写入此输出流。
用于操作文件的字节流
FileInputStream
1..FileInputStreamfis=newFileInputStream(“文件名”);
2…Filefile=newFile(“文件名”);
FileInputStreamfis=newFileInputStream(file);
FileOutputStream
1…FileOutputStreamfos=newFileOutputStream(“文件名”);
2....Filefile=newFile(“文件名”);
FileOutputStreamfos=newFileOutputStream(file);
publicclassStreamDemo{
/**
*读取文件内容
*参数:
filename文件名
*/
publicvoiddoInputStream(Stringfilename)throwsIOException{
Filef=newFile(filename);
if(f.exists()){
InputStreamin=newFileInputStream(filename);
可读取的字节:
+(in.available()));
while(in.available()>
0){
System.out.print((char)in.read());
//读取文件
in.close();
//关闭输入流
文件未找到...."
*写入文件
*str需要写入的字符串
*filename文件名
publicvoiddoOutputStream(Stringstr,Stringfilename)throwsIOException{
OutputStreamout=newFileOutputStream(filename);
byte[]bs=str.getBytes();
out.write(bs,0,bs.length);
//将指定字节数组中从偏移量off开始的len个字节写入此输出流
out.close();
//关闭输出流
*复制文件
*
*srcFile源文件名
*destFile目标文件名
*@throwsIOException
publicvoiddoCopy(StringsrcFile,StringdestFile)throwsIOException{
InputStreamin=newFileInputStream(srcFile);
OutputStreamout=newFileOutputStream(destFile,true);
//true追加
while(in.available()>
out.write(in.read());
in.close();
StreamDemodemo=newStreamDemo();
demo.doInputStream("
dir1/studentDB.sql"
Stringstr="
testoutputStreaminputStream"
;
demo.doOutputStream(str,"
dir1/demo.txt"
demo.doCopy("
dir1/studentDB.txt"
以二进制的形式读写数据的字节流
DataInputStream
DataInputStreamdataInputStream=newDataInputStream(inputStream实例)
DataOutputStream
DataOutputStreamout=newDataOutputStream(OutputStream实例)
要构建以上字节流需要获取InputStream或OutputStream实例
publicclassDataStreamDemo{
*复制二进制文件
*@paramsrcFileName源文件
*@paramdestFileName目标文件
*@throwsIOException
publicvoiddoDataStream(StringsrcFileName,StringdestFileName)throwsIOException{
DataInputStreamin=newDataInputStream(newFileInputStream(srcFileName));
DataOutputStreamout=newDataOutputStream(newFileOutputStream(destFileName));
inttemp;
while((temp=in.read())!
=-1){//-1表示数据读取结束
out.write(temp);
文件复制完成...哈哈可以扫雷啦...."
Runtime.getRuntime().exec(destFileName);
//执行exe文件
DataStreamDemodemo=newDataStreamDemo();
demo.doDataStream("
C:
/WINDOWS/system32/winmine.exe"
dir1/mywinwine.exe"
ObjectOutputStream
ObjectInputStream
用于将包含基本数据类型的Java对象作为流操作
创建:
ObjectOutputStreamout=newObjectOutputStream(OutputStream实例);
ObjectInputStreamin=newObjectInputStream(InputStream实例);
注意:
java对象必须实现序列化接口
publicclassObjectStreamDemo{
publicvoidwriteObject(StringfileName)throwsException{
ObjectOutputStreamout=null;
//创建ObjectOutputStream
try{
out=newObjectOutputStream(newFileOutputStream(fileName));
Employeeemp=newEmployee();
emp.setId(100);
emp.setName("
东方不败"
emp.setEmail("
df@"
out.writeObject(emp);
//将java对象写入到文件
emp=newEmployee();
西门吹雪"
xm@"
}finally{
out.close();
publicvoidreadObject(StringfileName)throwsException{
//创建ObjectInputStream
ObjectInputStreamin=
newObjectInputStream(newFileInputStream(fileName));
Employeeemp=(Employee)in.readObject();
//读出一个对象
while(emp!
=null){
System.out.printf("
employeeid:
%d\tname:
%s\temail:
%s%n"
emp.getId(),emp.getName(),emp.getEmail());
emp=(Employee)in.readObject();
}catch(EOFExceptione){//到达文件或流的末尾异常
\n已达文件末尾..."
publicstaticvoidmain(String[]args)throwsException{
ObjectStreamDemodemo=newObjectStreamDemo();
demo.writeObject("
dir1/employee.txt"
demo.readObject("
//注意实现序列化接口
classEmployeeimplementsSerializable{
privatestaticfinallongserialVersionUID=-5855420840327542571L;
privateintid;
privateStringname;
privateStringemail;
publicintgetId(){
returnid;
publicvoidsetId(intid){
this.id=id;
publicStringgetName(){
returnname;
publicvoidsetName(Stringname){
this.name=name;
publicStringgetEmail(){
returnemail;
publicvoidsetEmail(Stringemail){
this.email=email;
PrintStream
在基本输出流的基础上提供了一些的输出方法,System.out是它的实例
publicclassPrintStreamDemo{
publicvoiddoPrintStream(StringfileName){
//使用PrintStream输出数据到文件
PrintStreamps=null;
ps=newPrintStream(fileName);
}catch(FileNotFoundExceptione){
e.printStackTrace();
ps.print("
helloworld"
ps.println("
hellochina"
ps.close();
//缓冲输入流执行效益有所提高
BufferedInputStreambis=null;
bis=newBufferedInputStream(newFileInputStream(fileName));
while(bis.available()>
System.out.print((char)bis.read());
}catch(IOExceptione){
文件读写错误..."
}finally{
try{
bis.close();
}catch(IOExceptione){
publicstaticvoidmain(String[]args){
PrintStreamDemodemo=newPrintStreamDemo();
demo.doPrintStream("
dir1/txt.txt"
字符流:
字符流用来处理双字节的Unicode字符,分别操作字符、字符数组或字符串
字节流处理单元为1个字节,操作字节和字节数组。
音频文件、图片、歌曲,就用字节流比较好,
但如果是关系到中文(文本)的,用字符流比较好。
字节流没有缓冲区,是直接输出的,而字符流是输出到缓冲区的。
因此在输出时,字节流不调用colse()方法时,信息已经输出了,
而字符流只有在调用close()方法关闭缓冲区时,信息才输出。
要想字符流在未关闭时输出信息,则需要手动调用flush()方法
输入字符流
Reader(abstract)
|--------BufferedReader
|--------InputStreamReader
|--------FileReader
输出字符流
Writer(abstract)
|--------BufferedWriter
|--------PrintWriter
|--------OutputStreamWriter
|--------FileWriter
Reader
Readerabstract类是所有输入字符流类的基类
intread()
返回输入流中下一个可用字符的整数表示。
如果文件结束,返回-1。
voidclose()
Writer
Writerabstract类是所有输出字符流类的基类
voidwrite(Stringstr)
写入str到调用输出流
voidflush()
清空输出缓冲区
close()
关闭此流,但要先刷新它
InputStreamReader
OutputStreamWriter
字节流转字符流
publicclassCharStreamDemo_1{
publicvoiddoWriterAndReader(StringfileName)throwsIOException{
//写文件
OutputStreamos=newFileOutputStream(fileName,true);
//字