一.输入输出流
流:流就是指一连串流动的字符,以先进先出的方式发送信息的通道。
输出流:写数据。
输入流:读数据。
二.File类
1.构造方法:
构造方法摘要
File parent, String child)
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File 实例。
file: URI 转换为一个抽象路径名来创建一个新的 File 实例。
2.主要成员方法:
方法摘要
boolean
boolean
boolean
int
boolean
boolean
boolean
null。
null。
long
long
指定的分区上可用于此虚拟机的字节数。
int
boolean
boolean
boolean
boolean
long
long
boolean
boolean
例:
1 packagecom.swpu;2
3 importjava.io.File;4 importjava.io.IOException;5
6 public classFileDemo {7 public static voidmain(String[] args) {8 //创建File对象9 //注Linux中目录为/,Windows中为\\10 //File file=new File("G:\\io\\test.txt");11 //File file=new File("G:\\io","test.txt");
12 File file = new File("G:\\io");13 File file1 = new File(file, "test.txt");14 System.out.println("是否是文件夹" +file.isDirectory());15 System.out.println("是否是文件:" +file.isFile());16 //创建文件
17 File file2 = new File("G:\\io", "new");18 if (!file2.exists()) {19 file2.mkdir();20 //创建多级目录21 //file2.mkdirs();
22 }23 //创建文件
24 if (!file1.exists()) {25 try{26 file1.createNewFile();27 } catch(IOException e) {28 e.printStackTrace();29 }30 }31
32 }33 }
View Code
三.字节字符流
1.字节输入流(InputStream):
1.1InputStream:
成员方法:
方法摘要
int
void
void
在此输入流中标记当前的位置。
boolean
mark 和 reset 方法。
abstract int
int
从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。如果返回值为-1,则表示已经达到文件末尾。
int
将输入流中最多 len 个数据字节读入 byte 数组。
void
mark 方法时的位置。
long
跳过和丢弃此输入流中数据的 n 个字节。
例:
1 packagecom.swpu;2
3 importjava.io.FileInputStream;4 importjava.io.FileNotFoundException;5 importjava.io.IOException;6
7 public classFileInputDemo {8 public static voidmain(String[] args) {9 try{10 FileInputStream fis = new FileInputStream("G:\\io\\test.txt");11 //int n=fis.read();
12 int n=0;13 //while (n!=-1){14 //System.out.print((char)n);15 //n=fis.read();16 //}17 //一个一个读
18 while((n=fis.read())!=-1){19 System.out.print((char)n);20 }21 //fis.close();22 //利用数组读取
23 byte[] b=new byte[100];24 fis.read(b,0,5);25 System.out.println(newString(b));26 fis.close();27
28
29 } catch(FileNotFoundException e) {30 e.printStackTrace();31 } catch(IOException e) {32 e.printStackTrace();33 }34
35 }36 }
View Code
2.字节输出流(OutputStream):
成员方法:
方法摘要
void
void
void
将 b.length 个字节从指定的 byte 数组写入此输出流。
void
将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。
abstract void
将指定的字节写入此输出流。
1 packagecom.swpu;2
3 importjava.io.FileNotFoundException;4 importjava.io.FileOutputStream;5 importjava.io.IOException;6
7 public classFileOutputDemo {8
9 public static voidmain(String[] args) {10 //TODO Auto-generated method stub
11 try{12 //true参数,表示在后面追加
13 FileOutputStream fos=new FileOutputStream("G:\\io\\test.txt",true);14 fos.write(10);15 fos.write('h');16 fos.close();17 } catch(FileNotFoundException e) {18 //TODO Auto-generated catch block
19 e.printStackTrace();20 }21 catch(IOException e){22 e.printStackTrace();23 }24
25
26 }27
28 }
View Code
1 packagecom.swpu;2
3 importjava.io.FileInputStream;4 importjava.io.FileNotFoundException;5 importjava.io.FileOutputStream;6 importjava.io.IOException;7
8 public classFileCopy {9
10 public static voidmain(String[] args) {11 //文件拷贝
12 try{13 FileInputStream fis = new FileInputStream("test.png");14 FileOutputStream fos = new FileOutputStream("testcopy.png");15 int n = 0;16 byte[] b = new byte[1024];17 //可能复制的文件更大,因为最后一次可能没有1024
18 while ((n = fis.read(b)) != -1) {19 //fos.write(b);20 //n就是实际读的字节数
21 fos.write(b,0,n);22 }23 fis.close();24 fos.close();25 } catch(FileNotFoundException e) {26 //TODO Auto-generated catch block
27 e.printStackTrace();28 }29 catch(IOException e){30 e.printStackTrace();31 }32
33 }34
35 }
View Code
3.缓冲流:(提高性能)
BufferedInputStream:
BufferedInputStream 为另一个输入流添加一些功能,即缓冲输入以及支持 mark 和 reset 方法的能力。
BufferedOutputStream:
该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。
1 packagecom.swpu;2
3 importjava.io.BufferedInputStream;4 importjava.io.BufferedOutputStream;5 importjava.io.FileInputStream;6 importjava.io.FileNotFoundException;7 importjava.io.FileOutputStream;8 importjava.io.IOException;9
10 public classBufferFileDemo {11
12 public static voidmain(String[] args) {13 //TODO Auto-generated method stub
14 FileOutputStream fos;15 try{16 fos = new FileOutputStream("test.txt");17 BufferedOutputStream bos=newBufferedOutputStream(fos);18 FileInputStream fis=new FileInputStream("test.txt");19 BufferedInputStream bis=newBufferedInputStream(fis);20 bos.write('h');21 bos.write(22);22 //flush(),close()任意一个方法,强制清空缓冲区(缓冲区未满),写入文件
23 bos.flush();24 System.out.println(bis.read());25 System.out.println((char)bis.read());26 fos.close();27 bos.close();28 fis.close();29 bis.close();30
31 } catch(FileNotFoundException e) {32 //TODO Auto-generated catch block
33 e.printStackTrace();34 }35 catch(IOException e){36 e.printStackTrace();37 }38
39 }40
41 }
View Code
4.字符流:
4.1字符输入流:
4.2字符输出流:
4.3字节流和字符流的区别:
4.4字节字符转换流:
注保持读写数据编码一致,防止乱码。
1 packagecom.swpu;2
3 importjava.io.FileInputStream;4 importjava.io.FileNotFoundException;5 importjava.io.FileOutputStream;6 importjava.io.IOException;7 importjava.io.InputStreamReader;8 importjava.io.OutputStreamWriter;9
10 public classReaderDemo {11
12 public static voidmain(String[] args) {13 try{14 //注读写数据时要保证编码一致,防止乱码
15 FileInputStream fis=new FileInputStream("test.txt");16 InputStreamReader isr=newInputStreamReader(fis);17 FileOutputStream fos=new FileOutputStream("test2.txt");18 OutputStreamWriter osw=new OutputStreamWriter(fos,"utf-8");19 int n=0;20 char[] cbuf=new char[10];21 //while((n=fis.read())!=-1){22 //System.out.println((char)n);23 //}
24 while((n=isr.read(cbuf))!=-1){25 String str=new String(cbuf,0,n);26 System.out.println(str);27 osw.write(cbuf,0,n);28 osw.flush();29 }30 fis.close();31 fos.close();32 isr.close();33 osw.close();34 } catch(FileNotFoundException e) {35 //TODO Auto-generated catch block
36 e.printStackTrace();37 }38 catch(IOException e){39 e.printStackTrace();40 }41 }42
43 }
View Code
4.5字符缓冲流:
(1)BufferedReader():从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
(2)BufferedWriter():将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
1 packagecom.swpu;2
3 importjava.io.BufferedReader;4 importjava.io.BufferedWriter;5 importjava.io.FileInputStream;6 importjava.io.FileNotFoundException;7 importjava.io.FileOutputStream;8 importjava.io.IOException;9 importjava.io.InputStreamReader;10 importjava.io.OutputStreamWriter;11
12 public classReaderDemo {13
14 public static voidmain(String[] args) {15 try{16 //注读写数据时要保证编码一致,防止乱码
17 FileInputStream fis=new FileInputStream("test.txt");18 InputStreamReader isr=newInputStreamReader(fis);19 BufferedReader br=newBufferedReader(isr);20 FileOutputStream fos=new FileOutputStream("test2.txt");21 OutputStreamWriter osw=newOutputStreamWriter(fos);22 BufferedWriter bw=newBufferedWriter(osw);23 int n=0;24 char[] cbuf=new char[10];25 //while((n=fis.read())!=-1){26 //System.out.println((char)n);27 //}
28 while((n=br.read(cbuf))!=-1){29 String str=new String(cbuf,0,n);30 System.out.println(str);31 bw.write(cbuf,0,n);32 bw.flush();33 }34 fis.close();35 fos.close();36 isr.close();37 osw.close();38 br.close();39 bw.close();40 } catch(FileNotFoundException e) {41 //TODO Auto-generated catch block
42 e.printStackTrace();43 }44 catch(IOException e){45 e.printStackTrace();46 }47 }48
49 }
View Code
四.序列化
1.ObjectOutputStream 和 ObjectInputStream:
ObjectOutputStream 和 ObjectInputStream 分别与 FileOutputStream 和 FileInputStream 一起使用时,可以为应用程序提供对对象图形的持久存储。ObjectInputStream 用于恢复那些以前序列化的对象。其他用途包括使用套接字流在主机之间传递对象,或者用于编组和解组远程通信系统中的实参和形参。
1 packagecom.swpu;2
3 importjava.io.FileInputStream;4 importjava.io.FileNotFoundException;5 importjava.io.FileOutputStream;6 importjava.io.IOException;7 importjava.io.ObjectInputStream;8 importjava.io.ObjectOutputStream;9 importjava.io.Serializable;10 //实现Serializable接口(序列化接口)
11 class Good implementsSerializable{12 String num;13 String name;14 floatprice;15 public Good(String num,String name,floatprice){16 this.num=num;17 this.name=name;18 this.price=price;19 }20 publicString getNum() {21 returnnum;22 }23 public voidsetNum(String num) {24 this.num =num;25 }26 publicString getName() {27 returnname;28 }29 public voidsetName(String name) {30 this.name =name;31 }32 public floatgetPrice() {33 returnprice;34 }35 public void setPrice(floatprice) {36 this.price =price;37 }38 @Override39 publicString toString() {40 return "Good: ["+"num:"+num+",name:"+name+",price:"+price+"]";41 }42
43 }44 public classFileStreamDemo {45
46 public static voidmain(String[] args) {47 Good good=new Good("k1212","手机",2000);48 FileOutputStream fos;49 try{50 fos = new FileOutputStream("test.txt");51 ObjectOutputStream oos=newObjectOutputStream(fos);52 FileInputStream fis=new FileInputStream("test.txt");53 ObjectInputStream ois=newObjectInputStream(fis);54 //注意读的顺序和写的顺序要一致
55 oos.writeObject(good);56 oos.writeBoolean(true);57 oos.flush();58 try{59 Good goodaf=(Good)ois.readObject();60 System.out.println(goodaf);61 } catch(ClassNotFoundException e) {62 //TODO Auto-generated catch block
63 e.printStackTrace();64 }65 fos.close();66 fis.close();67 oos.close();68 ois.close();69
70 } catch(FileNotFoundException e) {71 //TODO Auto-generated catch block
72 e.printStackTrace();73 }74 catch(IOException e){75 e.printStackTrace();76 }77 }78
79 }
View Code