【Java基础】IO流操作
2013-01-16 00:00
836 查看
一、IO流概念:
输入输出流,也就是可以用来读写数据,以及上传下载数据。二、分类:
1、从流的对象来分:
1)高端流:所有程序或者内存中的流都称为高端流。2)低端流:所有外界设备中的流都是低端流。
如何区分到底是高端流还是低端流:
一般来说流的对象的后缀包含reader或者writer一般都是高端流,否则是低端流。(除了PrintStream,PrintStream也是高端流)
2、从数据的流向来分:
1)输入流:从外界设备-->程序,也就是读数据的动作。2)输出流:从程序-->外界设备,也就是写数据的动作。
3、从数据的格式来分:
1)字节流:是用来处理声音或者图片等等二进制信息的流。2)字符流:用来处理字符数据的流。
4、从流的对象是否需要包装来分:
1)原始流:流在实例化过程中,不需要通过另外一个流来包装自己的流。2)包装流:流在实例化过程中,需要通过另外一个流来包装自己的流。
原始流都是低端流,包装流都是高端流。
三、常用IO流:
1、文件操作
字节流:1)FileOutputStream
2)FileInputStream
字符流:
3)FileWriter
4)FileReader
区别:
(1)字节流的操作是直接与文件本身关联,不使用缓冲区;
(2)字符流的操作是通过缓冲区与文件关联。
一般都使用字节流,中文操作采用字符流。
2、内存操作流(多用于Java web)
5)ByteArrayOutputStream 内存向程序输出6)ByteArrayInputStream 程序向内存输入
package io.demo; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; public class ByteArrayDemo { public static void main(String[] args) { String str = "Hello World"; ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes()); // 内存输入流,将str输入保存在内存中 ByteArrayOutputStream bos = new ByteArrayOutputStream(); // 内存输出流,内容输出 int temp = 0; while ((temp = bis.read()) != -1) { bos.write((char) temp); } System.out.println(bos.toString());// bos.toString()取出内存输出内容 } }
3、BufferReader:缓冲区读取
package io.demo; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; public class BufferReaderIODemo { public static void main(String[] args) { //输出c:\demo.txt文件的内容 File file = new File("C:" + File.separator + "demo.txt"); if (file.exists()) try { InputStreamReader isr = new InputStreamReader( new FileInputStream(file)); BufferedReader buf = new BufferedReader(isr); while (true ) { String str=buf.readLine(); if(null ==str){ break; } System. out.println(str); } buf.close(); } catch (Exception e) { e.printStackTrace(); } } }
4、java提供两个类用于字节-字符流的转换
7)InputStreamReader:将字节的输入转换为字符流8)OutputStreamWriter:将字符的输出流转换为字节流的输出
5、对象序列化:Serializable
9)ObjectOutputStream:对象序列化10)ObjectInputStream:对象反序列化
首先需要实现序列化的对象必须实现 java.io.Serializable接口。
package io.demo; import java.io.Serializable; //Person類要實現 Serializable接口 public class Person implements Serializable { private static final long serialVersionUID = 1L; public Person(String name, int age) { this.age = age; this.name = name; } @Override public String toString() { return this .name + ":" + this.age ; } private String name; private int age ; } package io.demo; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class ObjIODemo { public static void main(String[] args) throws ClassNotFoundException { File file = new File("c:" + File.separator + "demo.txt"); if (!file.exists()) { try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } // 輸出流,以對象的形式寫入文件c:\demo.txt ObjectOutputStream objo = null; try { objo = new ObjectOutputStream(new FileOutputStream(file)); objo.writeObject( new Person("諸葛亮" , 22)); objo.writeObject( new Person("魯樹" , 23)); objo.writeObject( new Person("孔明" , 25)); objo.writeObject( new Person("valiate" , 26)); objo.close(); } catch (Exception e) { e.printStackTrace(); } // 從c:\demo.txt以對象的形式讀出 ObjectInputStream obji = null; try { obji = new ObjectInputStream(new FileInputStream(file)); while (true ) { Person per = (Person) obji.readObject(); if (null == per) break; System. out.print(per + " " ); per = (Person) obji.readObject(); } obji.close(); } catch (Exception e) { // 讀到文件結束符EOF會拋出EOFException異常,屏蔽異常信息輸出 // e.printStackTrace(); } } } //諸葛亮:22 魯樹:23 孔明:25 valiate:26
相关文章推荐
- Java基础之IO流,通过字节流对媒体文件进行复制操作
- java IO文件操作简单基础入门例子,IO流其实没那么难
- java基础—IO流——字节流的操作演示
- java基础9:io流对象之流的操作规律及总结
- 黑马程序员——Java基础IO流概述、字符流、字节流、流操作规律、File类、Properties类、打印流、序列流
- java基础(一)IO流操作
- 黑马程序员-JAVA基础-IO流之流操作规律及读写转换流
- 【java基础】IO流的操作分析
- Java基础之IO流,合并流对象SequenceInputStream对文件的切割与合并操作
- 黑马程序员_Java基础_IO流(File类和properties类相关操作)
- 黑马程序员——Java基础---IO流概述、字符流、字节流、流操作规律
- 黑马程序员--IO流和文件操作--java学习日记8(基础知识)
- 黑马程序员 java 基础 毕向东 面向对象 IO流操作
- JAVA基础 day23 IO流的其他类 (对象的序列化 管道流 RandomAccessFile类(随机读取文件) DateStream(操作基本数据类型的流) 操作数组的流 )字符编码问题
- java基础之IO流--DataOutputStream(专门用于操作Java基本数据类型的IO流对象)
- java IO文件操作简单基础入门例子,IO流其实没那么难
- 黑马程序员_Java基础_IO流(字符流缓冲区和字节流相关操作以及相关操作技巧)
- Java基础知识IO流(流操作规律)
- Java生涯——Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律
- 03_java基础_IO流和文件操作