Java-IO
Posted 为你编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java-IO相关的知识,希望对你有一定的参考价值。
1 public class Member { 2 private String name; 3 private int age; 4 public Member() { 5 } 6 public Member(String name, int age) { 7 this.name = name; 8 this.age = age; 9 } 10 public void setName(String name){ 11 this.name = name; 12 } 13 public void setAge(int age) { 14 this.age = age; 15 } 16 public String getName() { 17 return name; 18 } 19 public int getAge() { 20 return age; 21 } 22 }
1 import java.io.DataInputStream; 2 import java.io.DataOutputStream; 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 7 /** 8 * DataOutputStream 9 */ 10 public class DataStreamTest { 11 public static void main(String[] args) { 12 Member[] members = { new Member("Justin", 90), 13 new Member("momor", 95), 14 new Member("Bush", 88) }; 15 try { 16 DataOutputStream dos = new DataOutputStream(new FileOutputStream("E:/member.txt")); 17 for (Member member : members) { 18 // 写入UTF字符串 19 dos.writeUTF(member.getName()); 20 // 写入int数据 21 dos.writeInt(member.getAge()); 22 } 23 dos.flush();// 将流中的数据刷新到目的地 24 dos.close();// 关闭流 25 26 DataInputStream dis = new DataInputStream(new FileInputStream("E:/member.txt")); 27 // 读出数据并还原为对象 28 for (int i = 0; i < members.length; i++) { 29 String name = dis.readUTF();// 读出UTF字符串 30 int score = dis.readInt();// 读出int数据 31 members[i] = new Member(name, score); 32 } 33 dis.close();// 关闭流 34 35 // 显示还原后的数据 36 for (Member member : members) { 37 System.out.printf("%s %d%n", member.getName(), member.getAge()); 38 } 39 } catch (IOException e) { 40 e.printStackTrace(); 41 } 42 } 43 }
1 import java.io.File; 2 import java.io.FileInputStream; 3 import java.io.IOException; 4 import java.io.InputStream; 5 6 /** 7 * FileInputStream 字节输入流 8 */ 9 public class FileInputStreamTest { 10 public static void main(String[] args) { 11 InputStream in = null;//文件输入流 12 try{ 13 in = new FileInputStream(new File("E:/fileInputStreamTest.txt")); 14 /* 15 * FileInputStream是有缓冲区的,所以用完之后必须关闭,否则可能导致内存占满,数据丢失。 16 */ 17 int i = 0;//接收读取的内容 18 //streamReader.read()从文件读取一个字节,并当做int类型返回,如果遇到文件末尾,则返回-1 19 while((i = in.read())!=-1) { 20 System.out.print((char)i);//打印读取的内容 21 } 22 }catch (final IOException e) { 23 e.printStackTrace(); 24 }finally{ 25 try{ 26 in.close(); //关闭流 27 }catch (IOException e) { 28 e.printStackTrace(); 29 } 30 } 31 } 32 }
1 import java.io.FileInputStream; 2 import java.io.FileOutputStream; 3 import java.io.IOException; 4 5 /** 6 * 文件拷贝 7 */ 8 public class FileCopy { 9 public static void main(String[] args) { 10 byte[] b=new byte[512]; //一次取出的字节数大小,缓冲区大小 11 int i=0; 12 FileInputStream input=null; 13 FileOutputStream out =null; 14 try { 15 input=new FileInputStream("E:/fileInputStreamTest.txt"); 16 out=new FileOutputStream("E:/copy.txt",true); //如果文件不存在会自动创建,true表示写在文件末尾 17 18 while ((i=input.read(b))!=-1) { //i的目的在于防止最后一次读取的字节小于b长度,否则会自动被填充0 19 //使用输出流写入读取的内容到指定文件 20 out.write(b, 0, i); 21 } 22 } catch (final IOException e) { 23 e.printStackTrace(); 24 }finally{ 25 try { 26 input.close(); 27 out.close(); 28 } catch (IOException e) { 29 e.printStackTrace(); 30 } 31 } 32 } 33 }
1 import java.io.BufferedReader; 2 import java.io.BufferedWriter; 3 import java.io.File; 4 import java.io.FileReader; 5 import java.io.FileWriter; 6 import java.io.IOException; 7 8 /** 9 * BufferedReader、BufferedWriter 10 */ 11 public class FileWriterTest { 12 public static void main(String[] args) throws IOException{ 13 BufferedReader br = new BufferedReader(new FileReader(new File("E:/printTest.txt"))); 14 BufferedWriter bw = new BufferedWriter(new FileWriter(new File("E:/writeCopy.txt"))); 15 16 String str = null; 17 try { 18 while((str = br.readLine())!=null) { //一次读一行 19 bw.write(str); 20 } 21 } catch (IOException e) { 22 e.printStackTrace(); 23 }finally { 24 br.close(); 25 bw.close(); 26 } 27 } 28 }
1 import java.io.Serializable; 2 3 public class Student implements Serializable{ 4 5 private static final long serialVersionUID = 1L; 6 private String name; 7 private int age; 8 public Student() {} 9 public String getName() { 10 return name; 11 } 12 public void setName(String name) { 13 this.name = name; 14 } 15 public int getAge() { 16 return age; 17 } 18 public void setAge(int age) { 19 this.age = age; 20 } 21 public Student(String name, int age) { 22 this.name = name; 23 this.age = age; 24 } 25 @Override 26 public String toString() { 27 return "Student [name=" + name + ", age=" + age + "]"; 28 } 29 }
1 import java.io.FileInputStream; 2 import java.io.FileOutputStream; 3 import java.io.IOException; 4 import java.io.ObjectInputStream; 5 import java.io.ObjectOutputStream; 6 import java.util.ArrayList; 7 import java.util.List; 8 9 /** 10 * ObjectOutputStream 11 */ 12 public class ObjectStream { 13 public static void main(String[] args) { 14 // 对象输入输出流 15 ObjectOutputStream ow = null; 16 ObjectInputStream or = null; 17 List<Student> stuList = new ArrayList<Student>(); 18 Object obj = null; 19 try { 20 // 先将对象输出到文件中 21 ow = new ObjectOutputStream(new FileOutputStream("E:/student.txt")); 22 ow.writeObject(new Student("gg", 22)); 23 ow.writeObject(new Student("tt", 18)); 24 ow.writeObject(new Student("rr", 17)); 25 ow.writeObject(null);//添加一个null 是为了后续判断是否读取到末尾 26 // 然后从该文件读取对象 27 or = new ObjectInputStream(new FileInputStream("E:/student.txt")); 28 29 while((obj = or.readObject())!=null) { 30 stuList.add((Student) obj);// 将读取的对象强转成Student对象 31 } 32 for (Student student : stuList) { 33 System.out.println(student.getName() + "-" + student.getAge()); 34 } 35 } catch (IOException e) { 36 e.printStackTrace(); 37 } catch (ClassNotFoundException e) { 38 e.printStackTrace(); 39 } finally { 40 try { 41 ow.close(); 42 or.close();//关闭流 43 } catch (IOException e) { 44 e.printStackTrace(); 45 } 46 } 47 } 48 }
1 import java.io.FileReader; 2 import java.io.IOException; 3 import java.io.PrintWriter; 4 5 /** 6 * PrintWriter 7 */ 8 public class PrintTest { 9 public static void main(String[] args) { 10 FileReader reader=null; //读取字符文件的流 11 PrintWriter writer=null; //写字符到控制台的流 12 char[] b=new char[512]; //一次取出的字节数大小,缓冲区大小 13 int i=0; 14 try { 15 reader=new FileReader("E:/fileInputStreamTest.txt"); 16 //writer=new PrintWriter(System.out); //输出到控制台 17 writer=new PrintWriter("E:/printTest.txt"); //输出指定文件,没有自动创建 18 19 while ((i = reader.read(b))!=-1) { 20 writer.write(b, 0, i); 21 } 22 } catch (IOException e) { 23 e.printStackTrace(); 24 }finally{ 25 try { 26 reader.close(); 27 } catch (IOException e) { 28 e.printStackTrace(); 29 } 30 writer.close(); 31 } 32 } 33 }
1 import java.io.ByteArrayInputStream; 2 import java.io.IOException; 3 import java.io.PushbackInputStream; 4 /** 5 * 回退流:PushbackInputStream类继承了FilterInputStream类是iputStream类的修饰者。 6 * 提供可以将数据插入到输入流前端的能力(当然也可以做其他操作)。 7 * 简而言之PushbackInputStream类的作用就是能够在读取缓冲区的时候提前知道下一个字节是什么, 8 * 其实质是读取到下一个字符后回退的做法,这之间可以进行很多操作,这有点向你把读取缓冲区的过程当成一个数组的遍历, 9 * 遍历到某个字符的时候可以进行的操作, 10 * 当然,如果要插入,能够插入的最大字节数是与推回缓冲区的大小相关的,插入字符肯定不能大于缓冲区吧! 11 */ 12 public class PushBackInputStreamTest { 13 public static void main(String[] args) throws IOException { 14 String str = "hello,rollenholt"; 15 PushbackInputStream push = null; // 声明回退流对象 16 ByteArrayInputStream bat = null; // 声明字节数组流对象 17 bat = new ByteArrayInputStream(str.getBytes()); 18 push = new PushbackInputStream(bat); // 创建回退流对象,将拆解的字节数组流传入 19 int temp = 0; 20 while ((temp = push.read()) != -1) { // push.read()逐字节读取存放在temp中,如果读取完成返回-1 21 if (temp == ‘,‘) { // 判断读取的是否是逗号 22 push.unread(temp); //回到temp的位置 23 temp = push.read(); //接着读取字节 24 System.out.print("(回退" + (char) temp + ") "); // 输出回退的字符 25 } else { 26 System.out.print((char) temp); // 否则输出字符 27 } 28 } 29 } 30 }
1 import java.io.BufferedOutputStream; 2 import java.io.FileInputStream; 3 import java.io.FileNotFoundException; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.io.SequenceInputStream; 8 import java.util.Enumeration; 9 import java.util.Vector; 10 11 /** 12 * SequenceInputStream 13 */ 14 public class SequenceInputStreamTest { 15 /** 16 * SequenceInputStream合并流, 17 * 将与之相连接的流集组合成一个输入流并从第一个输入流开始读取, 18 * 直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。 19 * 合并流的作用是将多个源合并合一个源。可接收枚举类所封闭的多个字节流对象。 20 */ 21 public static void main(String[] args) { 22 doSequence(); 23 } 24 private static void doSequence() { 25 // 创建一个合并流的对象 26 SequenceInputStream sis = null; 27 // 创建输出流。 28 BufferedOutputStream bos = null; 29 try { 30 // 构建流集合。 31 Vector<InputStream> vector = new Vector<InputStream>(); 32 vector.addElement(new FileInputStream("E:/text1.txt")); 33 vector.addElement(new FileInputStream("E:/text2.txt")); 34 vector.addElement(new FileInputStream("E:/text3.txt")); 35 Enumeration<InputStream> e = vector.elements(); 36 37 sis = new SequenceInputStream(e); //将多个输入流合并到合并流 38 bos = new BufferedOutputStream(new FileOutputStream("E:/text4.txt",true));//true追加末尾 39 // 读写数据 40 byte[] buf = new byte[1024]; 41 int len = 0; 42 while ((len = sis.read(buf)) != -1) { 43 bos.write(buf, 0, len); 44 bos.flush(); 45 } 46 } catch (FileNotFoundException e1) { 47 e1.printStackTrace(); 48 } catch (IOException e1) { 49 e1.printStackTrace(); 50 } finally { 51 try { 52 if (sis != null) 53 sis.close(); 54 } catch (IOException e) { 55 e.printStackTrace(); 56 } 57 try { 58 if (bos != null) 59 bos.close(); 60 } catch (IOException e) { 61 e.printStackTrace(); 62 } 63 } 64 } 65 }
以上是关于Java-IO的主要内容,如果未能解决你的问题,请参考以下文章