java view输出_Java输入输出流

一.输入输出流

流:流就是指一连串流动的字符,以先进先出的方式发送信息的通道。

输出流:写数据。

输入流:读数据。

二.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

例:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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):

adfc151129145083b98451b87ce7cbad.png

1.1InputStream:

成员方法:

方法摘要

int

void

void

在此输入流中标记当前的位置。

boolean

mark 和 reset 方法。

abstract  int

int

从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。如果返回值为-1,则表示已经达到文件末尾。

int

将输入流中最多 len 个数据字节读入 byte 数组。

void

mark 方法时的位置。

long

跳过和丢弃此输入流中数据的 n 个字节。

例:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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):

4a2f6e9cf82368aeeaa2b922df9db9d6.png

成员方法:

方法摘要

void

void

void

将 b.length 个字节从指定的 byte 数组写入此输出流。

void

将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。

abstract  void

将指定的字节写入此输出流。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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:

该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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字符输入流:

874a64f99c5980eebc17d7b1a2048e7e.png

4.2字符输出流:

2be9b7cad9e185f04723cb48900913ac.png

4.3字节流和字符流的区别:

4.4字节字符转换流:

注保持读写数据编码一致,防止乱码。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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():将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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 用于恢复那些以前序列化的对象。其他用途包括使用套接字流在主机之间传递对象,或者用于编组和解组远程通信系统中的实参和形参。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值