博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IO流的基础与小型项目
阅读量:5113 次
发布时间:2019-06-13

本文共 7793 字,大约阅读时间需要 25 分钟。

IO流

对于流的描述,流是一种抽象的描述。

流的分类:

1、输入流(Input)

2、输出流(Output)

 

按类型分:

1、字节流(InputStream/OutputStream)

1 public class ReadFileByLoop { 2 ​ 3     public static void main(String[] args) throws IOException { 4         // TODO Auto-generated method stub 5 ​ 6         // 根据给定的文件路径构建一个字节输入流对象 7         File f = new File("C:\\Users\\lenovo\\Desktop\\培训\\试卷及答案\\1.txt"); 8         InputStream is = new FileInputStream(f); 9         // 准备一个自己缓冲区10         byte[] b = new byte[1024];11         // 申明一个临时变量记录本次读取的真实长度12         int len = 0;13         while ((len = is.read(b)) != -1) {14             String s = new String(b, 0, len);15             System.out.println(s);16         }17 ​18         // is.close();19     }20 ​21 }

 

 

2、字符流(Reader/Writer)

 
1 public class ReadFileByChar { 2 ​ 3     public static void main(String[] args) throws IOException { 4         //创建一个File对象 5         File f = new File("C:\\Users\\lenovo\\Desktop\\培训\\试卷及答案\\1.txt"); 6         //构建一个字符输入流 7         FileReader fr = new FileReader(f); 8         char[] a=new char[1024]; 9         int len;10         while((len=fr.read(a))!=-1){11             String s=new String(a,0,len);12             System.out.println(s);13         }14         fr.close();15     }16 }17

 

按照功能分:

1、节点流(低级流)

2、处理流(高级流)

字节流到字符流之间的流动用InputStreamReader

BufferedReader x=new BufferedReader(new InputStreamReader(System.in))

字符流到字符流之间的流动用OutputStreamWriter

 

 

对一个文件夹拷贝

 
1 public class Test { 2 ​ 3     // 递归方法 4     public static void copyFile(File file, File file2) { 5         // 当找到目录时,创建目录 6         if (file.isDirectory()) { 7             file2.mkdir(); // 创建目录 8             File[] files = file.listFiles(); 9             for (File f : files) {10                 // 递归11                 copyFile(f, new File(file2, f.getName()));12             }13             // 当找到文件时14         } else if (file.isFile()) {15             File f = new File(file2.getAbsolutePath());16             try {17                 f.createNewFile();18                 copyDatas(file.getAbsolutePath(), f.getAbsolutePath());19             } catch (IOException e) {20                 e.printStackTrace();21             }22         }23     }24 ​25     // 复制文件数据的方法26     public static void copyDatas(String filePath, String filePath1) {27         FileInputStream fis = null;28         FileOutputStream fos = null;29         try {30             // 字节流31             fis = new FileInputStream(filePath);32             fos = new FileOutputStream(filePath1);33             byte[] buffer = new byte[1024];34             while (true) {35                 int temp = fis.read(buffer, 0, buffer.length);36                 if (temp == -1) {37                     break;38                 } else {39                     fos.write(buffer, 0, temp);40                 }41             }42         } catch (IOException e) {43             System.out.println(e);44         } finally {45             try {46                 fis.close();47                 fos.close();48             } catch (IOException e) {49                 System.out.println(e);50             }51         }52     }53 ​54     public static void main(String args[]) {55         File file = new File("D:\\大学文件管理");56         File file2 = new File("D:\\1");57         copyFile(file, file2);58     }59 }

 

对象序列化

对象序列化是一种用于在文件或者各种其他输入输出设备中存储java对象的机制,通过将实现过序列化结构的对象存储到指定的输出源,可以完整的保存对象数据;对象序列化机制一般常用于大型项目中的缓存技术,以缓存经常需要使用到的对象数据;java中实现对象序列化通常包含两种方式:

  1. 实现Serializable接口

  2. 实现Externalizable接口

完成对象序列化的过程必须包含以下步骤:

  1. 需要完成序列化的对象对应的类必须实现Serializable接口

  2. 通过对象输出流将对象存储到指定的输出源(文件,网络)中(通过ObjectOutputStream)

例子:

输入三个成绩,语数外三个科目的成绩:按照总成绩存到文件夹,在控制台查看

 
1 ​  2 public class Student implements Serializable{  3 ​  4     /**  5      *   6      */  7     private static final long serialVersionUID = 1L;  8     private int chinese;  9     private int math; 10     private int english; 11     private int sorce; 12      13     public Student() { 14         // TODO Auto-generated constructor stub 15     } 16     public Student(int chinese, int math, int english) { 17         super(); 18         this.chinese = chinese; 19         this.math = math; 20         this.english = english; 21         this.sorce=chinese+english+math; 22     } 23     public int getSorce() { 24         return sorce; 25     } 26     public int getChinese() { 27         return chinese; 28     } 29     public void setChinese(int chinese) { 30         this.chinese = chinese; 31     } 32     public int getMath() { 33         return math; 34     } 35     public void setMath(int math) { 36         this.math = math; 37     } 38     public int getEnglish() { 39         return english; 40     } 41     public void setEnglish(int english) { 42         this.english = english; 43     } 44     @Override 45     public String toString() { 46         return "Student 语文=" + chinese + ", 数学=" + math + ", 英语=" + english + ", 总分=" + sorce + "]"; 47     } 48      49 } 50 ​ 51 ​ 52 ​ 53 ​ 54 ​ 55 ​ 56 package com.softeem.Objects; 57 ​ 58 import java.io.FileInputStream; 59 import java.io.FileOutputStream; 60 import java.io.IOException; 61 import java.io.InputStream; 62 import java.io.ObjectInputStream; 63 import java.io.ObjectOutputStream; 64 import java.io.OutputStream; 65 import java.util.ArrayList; 66 import java.util.Comparator; 67 import java.util.List; 68 import java.util.Scanner; 69 ​ 70 public class StudentTest { 71     ArrayList
list = new ArrayList<>(); 72 Student stu = new Student(); 73 ​ 74 public void scanner() { 75 Scanner sc = new Scanner(System.in); 76 System.out.println("语文成绩:"); 77 int a = sc.nextInt(); 78 System.out.println("数学成绩:"); 79 int b = sc.nextInt(); 80 System.out.println("英语成绩:"); 81 int c = sc.nextInt(); 82 Student stu = new Student(a, b, c); 83 list.add(stu); 84 System.out.println("添加成功!"); 85 } 86 ​ 87 public void select() { 88 for (Student s : list) { 89 System.out.println(s); 90 } 91 ​ 92 } 93 ​ 94 public void copy() throws IOException, ClassNotFoundException { 95 list.sort(new Comparator
() { 96 @Override 97 public int compare(Student x, Student y) { 98 // TODO Auto-generated method stub 99 return x.getSorce() - y.getSorce();100 }101 });102 OutputStream os = new FileOutputStream("ok.txt");103 ObjectOutputStream oos = new ObjectOutputStream(os);104 oos.writeObject(list);105 oos.close();106 }107 ​108 private void selectCopy() throws IOException, ClassNotFoundException {109 InputStream is = new FileInputStream("ok.txt");110 ObjectInputStream ois = new ObjectInputStream(is);111 Object obj = ois.readObject();112 //ois.readLine()113 System.out.println(obj);114 }115 public void pint() throws ClassNotFoundException, IOException {116 System.out.println("----------【1】输入学生成绩-----------");117 System.out.println("----------【2】学生成绩查询-----------");118 System.out.println("----------【3】将学生信息添加到文件中----");119 System.out.println("----------【4】显示文件中的信息--------");120 System.out.println("----------【5】退出--------");121 Scanner sc = new Scanner(System.in);122 System.out.println("请选择:");123 int i = sc.nextInt();124 switch (i) {125 case 1:126 scanner();127 pint();128 break;129 case 2:130 System.out.println("查询结果如下:");131 select();132 System.out.println("查询成功");133 pint();134 case 3:135 copy();136 pint();137 System.out.println("导入成功!");138 break;139 case 4:140 selectCopy();141 pint();142 break;143 case 5:144 System.out.println("退出成功!");145 break;146 default:147 System.err.println("输入错误");148 }149 }150 ​151 152 ​153 public static void main(String[] args) throws ClassNotFoundException, IOException {154 new StudentTest().pint();155 }156 }

 

 

转载于:https://www.cnblogs.com/danhua520tuzi/p/9392431.html

你可能感兴趣的文章
(安卓)一般安卓开始界面 Loding 跳转 实例 ---亲测!
查看>>
Mysql 索引优化 - 1
查看>>
LeetCode(3) || Median of Two Sorted Arrays
查看>>
大话文本检测经典模型:EAST
查看>>
待整理
查看>>
一次动态sql查询订单数据的设计
查看>>
C# 类(10) 抽象类.
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
jvm参数
查看>>
我对前端MVC的理解
查看>>
Silverlight实用窍门系列:19.Silverlight调用webservice上传多个文件【附带源码实例】...
查看>>
2016.3.31考试心得
查看>>
mmap和MappedByteBuffer
查看>>
Linux的基本操作
查看>>
转-求解最大连续子数组的算法
查看>>
对数器的使用
查看>>
【ASP.NET】演绎GridView基本操作事件
查看>>
ubuntu无法解析主机错误与解决的方法
查看>>
尚学堂Java面试题整理
查看>>
MySQL表的四种分区类型
查看>>