IO
IO以为计算机的输入和输出。直观来说,键盘就是一个输入设备显示屏就是输出设备。针对程序中的输入输出java提供了IO的API。
由于虚拟机下面操作系统的差异性,IO底层的操作肯定不是java代码写的。但是虚拟机屏蔽了底层的差异性对外提供了统一的API。
IO中最要的一点就是对象的序列化。由于对象存在类存中不可能永久保存,所以提供了序列化功能.将对象从内存中读出来然后保存
到硬盘上面。出于某些原因序列化这个功能没有放在Object'对象中,而是提供了一个标记接口Serializable.这个接口没有任何方法。只做标记
作用。凡是实现了该接口的对象就能实现对象的序列化功能。在IO中提供了ObjectInputStram/ObjectInputStream用来序列化对象和反序列化
对象.
File是对系统的文件/文件夹操作。该对象提供大量对文件操作的方法。
然后就是IO中的IO流操作。在IO中使用了装饰模式。最低层的接口是InputStream/OutputStream,这两个接口是针对字节流操作的。
Reader/Writer两个类是正对字符流操作的。字节流转换成字符流采用了InputStreamReader/OutputStreamReader两个类进行转换。提供了字
符流或者字节流的缓存类。由于类里面自带列缓存,所以使用上面更加方便。输入和输出流之间操作一般的都是使用byte数组循环读取操作。
由于API的分装。所以Socket的操作大量使用了IO来通行,虽然网络链路上面的是0和1,但是服务器和客服端都是可以转换成字符串了。所
以很多网络协议在就是按照一定的约定发送字符串,接受方接受和解析字符串然后接受请求开始通信。
IO流的操作基本上都是要异常处理的,由于底层不是java实现。不能用虚拟机管理对象。所以IO操作中必须手动关闭IO流,释放资源。
在Web中上传文件是一定有的,将每天的文件放在一个文件夹里面管理也是一种和常用的技巧。最近写代码开始合理设计对象。尽量保证
自己的代码这里写了,其他位置还能使用。相对以前的代码。慢慢学习设计方法和类了,经过的一段时间的学习。慢慢的也能掌握面向对象思想了吧。
1 package com.io; 2 3 4 5 import java.io.BufferedInputStream; 6 7 import java.io.BufferedOutputStream; 8 9 import java.io.File; 10 11 import java.io.FileInputStream; 12 13 import java.io.FileOutputStream; 14 15 import java.io.IOException; 16 17 import java.io.InputStream; 18 19 import java.io.OutputStream; 20 21 import java.io.Serializable; 22 23 import java.text.DateFormat; 24 25 import java.text.SimpleDateFormat; 26 27 import java.util.Date; 28 29 import java.util.Random; 30 31 //按照时间来创建文件夹然后保存文件 32 33 public class IoDemo implements Serializable 34 35 { 36 37 private static final long serialVersionUID = 1L; 38 39 private String fileRoot; 40 41 private File file; 42 43 public IoDemo(String fileRoot,File file) 44 45 { 46 47 this.fileRoot=fileRoot; 48 49 this.file=file; 50 51 } 52 53 54 55 56 57 public void savaFile() throws IOException 58 59 { 60 61 //得到今天保存文件的文件夹 62 63 String fileUrl=fileRoot+"\\"+getDate(); 64 65 //如果文件夹不存在就创建以今天时间为名的文件夹 66 67 isDirectory(fileUrl); 68 69 //创建保存的文件对象 70 71 String fileName=getRandomByEight()+file.getName(); 72 73 File savaFile=new File(fileUrl,fileName); 74 75 savaFile.createNewFile(); 76 77 savaFile(file,savaFile); 78 79 } 80 81 82 83 //得到当前日期 84 85 private String getDate() { 86 87 Date date = new Date(); 88 89 DateFormat df = new SimpleDateFormat("yyyyMMdd"); 90 91 return df.format(date); 92 93 94 95 } 96 97 //产生随机数 98 99 private int getRandomByEight() 100 101 { 102 103 Random random=new Random(); 104 105 int i=0; 106 107 for(int j=0;j<8;j++) 108 109 i=i*10+random.nextInt(8)+1; 110 111 return i; 112 113 } 114 115 //判断当前路劲是否有文件夹 116 117 private void isDirectory(String url) 118 119 { 120 121 File file=new File(url); 122 123 if(!file.isDirectory()) 124 125 file.mkdir(); 126 127 } 128 129 //根据两个文件对象保存文件 130 131 private void savaFile(File file,File savaFile) throws IOException 132 133 { 134 135 //文件的读取流 136 137 InputStream is=new FileInputStream(file); 138 139 BufferedInputStream bis=new BufferedInputStream(is); 140 141 //保存文件的流 142 143 OutputStream os=new FileOutputStream(savaFile); 144 145 BufferedOutputStream bos=new BufferedOutputStream(os); 146 147 //创建byte数组操作 148 149 byte[] b=new byte[1024*1024]; 150 151 int k=-1; 152 153 while((k=bis.read(b))>0) 154 155 { 156 157 bos.write(b, 0, k); 158 159 } 160 161 //关闭IO 162 163 bos.close(); 164 165 bis.close(); 166 167 } 168 169 }
浙公网安备 33010602011771号