JAVA IO 流
一.概括
1.IO(INPUT OUTPUT)流
1.1 IO 流用来处理设备之间的数据传输1.2JAVA 对数据的操作是通过流的方式1.3 JAVA 用于操作流的对象都在 IO 包中1.4 流按操作数据分两种:字节流与字符流
2. IO 流常用基类
2.1 字节流的抽象基类
InputStream, OutputStream
2.2 字符流的抽象基类
Reader, Writer(注: 由这四个类派生出来的子类名称都是以其父类名作为子类名如: InputStream 的子类 FileInputStream.Reader 的子类 FileReader)
3. 程序书写
3.1 对 IO 异常处理
必须要捕获异常原因:1 捕获了异常,报告读取错误,然后由用户处理2 程序继续读,还读不到,继续读。。。。。直到永远...
3.2在 finally 中对流进行关闭
思考:有了垃圾回收机制为什么还要调用 close 方法关闭答:Java有垃圾回收机制就像是我们的清洁工,每天会定时的打扫街道两三次,但是如果路人不爱清洁;每时每刻都在制造垃圾,,那么我们的街道时时刻刻都是脏的。而清洁工的能力和工作次数是有限的,,在这种情况下就是我们的街道也就是内存会处于高负荷状态。跟没有清洁工没两样了。。因为java的垃圾回收,用户是没有办法控制的,它会在不确定的时候触发,而且java不保证在整个程序运行期一定会触发垃圾回收,所以对于流、socket等之类的资源用完之后一定要关闭。而且垃圾回收机制对于socket、thread之类的对象即使引用计数为0了,只要还是在活动的情况下,也不会被回收。
二. 字符流(纯文本文件不包括图片)
1.创建文件
public static void testFileWriter(){ FileWriter fw = null; try { fw = new FileWriter("/Users/zzy/Downloads/filewriter.txt"); fw.write("鲁A08Z72"); } catch (IOException e) { e.printStackTrace(); } finally { if (fw != null){ try { fw.close(); } catch (IOException e) { e.printStackTrace(); } } } }
2.读取文件
public static void testFileReader(){ FileReader fr = null; try { fr = new FileReader("/Users/zzy/Downloads/项目整合步骤.txt"); char[] buf = new char[1024]; int len = 0; while ((len = fr.read(buf)) != -1){ System.out.println(new String(buf, 0, len )); } } catch (Exception e) { System.out.println("read-exception:" + e.toString()); } finally { if (fr != null){ try { fr.close(); } catch (IOException e) { System.out.println("close-exception:"+ e.toString()); } } } }
3.字符流的缓冲区
BufferedWriterBufferdReader
三. 字节流(二进制文件,十六进制文件)
public static void readFile_2()throws IOException { FileInputStream fis = new FileInputStream("fos.txt"); byte[] buf = new byte[1024]; int len = 0; while((len=fis.read(buf))!=-1) { System.out.println(new String(buf,0,len)); } fis.close(); }
public static void writeFile()throws IOException { FileOutputStream fos = new FileOutputStream("fos.txt"); fos.write("abcde".getBytes()); fos.close(); }
四.字节流转字符流
转换流: InputStreamReader,
OutputStreamWriterpublic static void testTransformer(){ //获取键盘录入对象。 //InputStream in = System.in; //将字节流对象转成字符流对象,使用转换流。InputStreamReader //InputStreamReader isr = new InputStreamReader(in); //为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader //BufferedReader bufr = new BufferedReader(isr); //键盘的最常见写法。 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));// OutputStream out = System.out;// OutputStreamWriter osw = new OutputStreamWriter(out);// BufferedWriter bufw = new BufferedWriter(osw); BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out)); String line = null; try { while((line=bufr.readLine())!=null) { if("over".equals(line)) break; bufw.write(line.toUpperCase()); bufw.newLine(); bufw.flush(); } } catch (IOException e) { e.printStackTrace(); } finally { if (bufw != null){ try { bufr.close(); } catch (IOException e) { e.printStackTrace(); } } } }