IO流
1.流的分类
1.1 单位:字符流、字节流
1.2 流向:输入、输出
1.3 角色:结点、处理
2.流的体系结构
抽象基类 文件流 缓冲流
InputStream FileInputStream BufferedInputStream
OutputStream OutputStream BufferedOutputStream
Reader FileReader BufferedReader
Writer FileWriter BufferedWriter
3.流的操作
1.文件的单个读取 字符读取
@Test public void test1(){ FileReader fileReader = null; try { File file = new File("./hello.txt"); fileReader = new FileReader(file); int data; while (( data = fileReader.read()) != -1){ System.out.print((char) data); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if(fileReader != null) fileReader.close(); } catch (IOException e) { e.printStackTrace(); } } }
2.文件的多个字符读取 字符读取
public void test1(){ FileReader fileReader = null; try { File file = new File("./hello.txt"); fileReader = new FileReader(file); int len; char[] buffer = new char[5]; while (( len = fileReader.read(buffer)) != -1){ for (int i = 0; i < len; i++) { System.out.print(buffer[i]); } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if(fileReader != null) fileReader.close(); } catch (IOException e) { e.printStackTrace(); } } }
3.文件的写入 字符写入
public void test2() throws IOException { File file = new File("hello1.txt"); FileWriter fileWriter = new FileWriter(file,true); fileWriter.write("i am a china\n"); fileWriter.write("i am a man\n"); fileWriter.close(); }
4.图片的写入 字节写入
public void test4(){ FileInputStream fileReader = null; FileOutputStream fileWriter = null; try { File srcFile = new File("1.jpg"); File toFile = new File("2.jpg"); fileReader = new FileInputStream(s fileWriter = new FileOutputStream( byte[] bbuffer = new byte[5]; int len = 0; while ((len=fileReader.read(bbuffe fileWriter.write(bbuffer,0,len } } catch (IOException e) { e.printStackTrace(); } finally { try { if (fileWriter != null) { fileReader.close(); } } catch (IOException e) { e.printStackTrace(); } try { if (fileWriter != null) { fileWriter.close(); } } catch (IOException e) { e.printStackTrace(); } } }
5.缓冲流的写入
public void test5(){ FileInputStream fileReader = null; FileOutputStream fileWriter = null; try { File srcFile = new File("fish.mp4"); File toFile = new File("fish2.mp4"); fileReader = new FileInputStream(srcFile); fileWriter = new FileOutputStream(toFile); BufferedInputStream bufferedInputStream = new BufferedOutputStream bufferedOutputStream = ne int len = 0; byte[] bbuffer = new byte[10]; while ((len=bufferedInputStream.read(bbuffer)) bufferedOutputStream.write(bbuffer,0,len); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (fileWriter != null) { fileReader.close(); } } catch (IOException e) { e.printStackTrace(); } try { if (fileWriter != null) { fileWriter.close(); } } catch (IOException e) { e.printStackTrace(); } } }
6.流转换成字符(字节转字符) 解码操作 读取中文不乱码
public void test3() throws IOException { File file = new File("abc.txt"); FileInputStream fileInputStream = new FileInputStream(file); InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream); char[] b = new char[5]; int len = 0; while ( (len = inputStreamReader.read(b))!=-1 ){ java.lang.String s = new java.lang.String(b, 0, len); System.out.print(s); } inputStreamReader.close(); }
7.utf-8 转gbk
public void test7() throws IOException { InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(new File("a.txt"))); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(new File("a_gbk.txt")),"gbk"); char[] c = new char[20]; int len = 0; while ( (len=inputStreamReader.read(c))!=-1 ){ outputStreamWriter.write(c,0,len); } inputStreamReader.close(); outputStreamWriter.close(); }
8.标准的输入输出流
public static void main(String[] args) { InputStreamReader inputStreamReader = null; try { inputStreamReader = new InputStreamReader(System.in); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); while (true){ System.out.println("请输入字符:"); String s = bufferedReader.readLine(); if("e".equals(s) || "exit".equals(s)){ System.out.println("程序退出"); break; } System.out.println(s); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (inputStreamReader != null) { inputStreamReader.close(); } } catch (IOException e) { e.printStackTrace(); } } }
9.数据流
public void test2() throws IOException { DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(new File("c.txt"))); dataOutputStream.writeUTF("张三"); dataOutputStream.writeInt(23); dataOutputStream.writeBoolean(true); dataOutputStream.close(); DataInputStream dataInputStream = new DataInputStream(new FileInputStream(new File("c.txt"))); String s = dataInputStream.readUTF(); int i = dataInputStream.readInt(); boolean b = dataInputStream.readBoolean(); System.out.println("姓名:" + s + "年龄:" + i + "是否男性:" + b); dataInputStream.close(); }
10.对象的序列化和反序列化
public void test3() throws IOException, ClassNotFoundException { ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("o.dat"))); java.lang.String a = new java.lang.String("我是中国人"); objectOutputStream.writeObject(a); objectOutputStream.close(); ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("o.dat"))); java.lang.String o = (java.lang.String)objectInputStream.readObject(); System.out.println(o); objectInputStream.close(); }
Person类
package com.cj.java4; import java.io.Serializable; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @interface MyAnnotationType { String tableName(); } @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @interface MyAnnotationField { String fieldName(); } @MyAnnotationType(tableName = "db_person") public class Person implements Serializable { static final long serialVersionUID = 123124377453022888L; @MyAnnotationField(fieldName = "db_age") public Integer age; @MyAnnotationField(fieldName = "db_name") private String name; Person(){ } private Person(String name){ this.name = name; } private Person(Integer age){ this.age = age; } public Person(Integer age, String name){ this.age = age; this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void show(){ System.out.println(this.name + "-" + this.age); } private String showNation(String nation){ System.out.println("我是"+nation); return nation; } @Override public String toString() { return "Person" + "姓名:" + name + "年龄:" + age; } }
1 写入写出Person 类
public void test3() throws IOException, ClassNotFoundException { ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("o.dat"))); java.lang.String a = new java.lang.String("我是中国人"); objectOutputStream.writeObject(a); Person person = new Person(12, "王五"); objectOutputStream.writeObject(person); objectOutputStream.close(); ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("o.dat"))); java.lang.String o = (java.lang.String)objectInputStream.readObject(); Person person1 = (Person) objectInputStream.readObject(); System.out.println(o); System.out.println(person1.toString()); objectInputStream.close(); }
11 随机存取(在指定位置插入数据)
public void test4() throws IOException { RandomAccessFile rw = new RandomAccessFile("hello1.txt", "rw"); rw.seek(3); StringBuffer stringBuffer = new StringBuffer((int) new File("hello1.txt").length()); int len = 0; byte[] b = new byte[20]; while( (len = rw.read(b))!= -1 ){ stringBuffer.append(new java.lang.String(b,0,len)); } rw.seek(3); rw.write("wxyz".getBytes()); rw.write(stringBuffer.toString().getBytes()); rw.close(); }