规范输入输出流
规范输出流
本人实现键盘录入数据
InputStream is = System.in;//InputStream是字节输出流的形象基类//字节流读数据int by;while((by = is.read())!=-1){ sout(char(by));}//读取数据来自键盘输入//把字节流转换为字符流读数据 用转换流InputStreamReader isr = new InputStreamReader(is);//应用字符流一次读一行数据 能够 然而一次读取一行数据的办法是字符缓冲输出流的特有办法BufferedReader br = new BufferedReader(isr); //字符流包装为字符缓冲输出流//下面三个步骤能够用一个步骤实现BufferedReader br = new BufferedReader( new InputStreamReader(System.in));String line = br.readLine();// 字符串int i = Integer.parseInt(br.readLine());//字符串转换为整数
下面优化 本人实现键盘录入太麻烦了,Java提供了一个类供咱们应用Scanner
Scanner sc = new Scanner(System.in);
规范输入流
PrintStream ps = System.out;//可能不便的打印各种数值ps.print("hello");ps.println("hello");//等同于System.out.print("hello");//System.out实质是一个字节输入流
打印流
字节打印流
//应用指定的文件名创立新的打印流PrintStream ps = new PrintStream(fileName:"MyOtherStream\\ps.txt");//写数据//字节输入流有的办法ps.write(b:97);/显示a 继承的办法//应用特有办法写数据ps.print(97); //显示97//开释资源ps.close();
字符打印流
//应用指定的文件名创立一个新的PrintWriter,而不须要主动执行刷新PrintWriter pw = new PrintWriter(fileName:"MyOtherStream\\pw.txt");//写数据//字符输入流有的办法pw.write(s:"hello");/不显示货色 因为是字符打印流,字符流的数据是不能间接到文件的,须要刷新一下pw.write(s:"r\n");pw.flush();//应用特有办法写数据pw.println("hello"); //只有本人也不显示pw.flush();//创立一个新的PrintWriter 可主动刷新 依据那个true做PrintWriter pw = PrintWriter(new FileWriter(fileName:"MyOtherStream\\pw.txt"),autoFlush:true);pw.println("hello"); //数据能够间接进来 true主动刷新 false不会主动刷新//开释资源ps.close();
案例 复制java文件 打印流改进版
//数据源创立字符输出流对象 字符缓冲输出流BufferedReader br = new BufferedReader(new FileReader(fileName:"MyOtherStream\\PrintStreamDemo.java"));//目的地创立字符输入流对象BufferedWriter bw = new BufferedWriter(new FileWriter(fileName:"MyOtherStream\\Copy.java"));//读写数据复制文件//应用字符缓冲流特有性能实现String line;while((line = br.readLine())!=null){ bw.write(line);//不蕴含换行符 所有数据都在同一行 bw.newwLine(); bw.flush();}//开释资源bw.close();br.close();
//下面三步能够用一步实现//数据源创立字符输出流对象 字符缓冲输出流BufferedReader br = new BufferedReader(new FileReader(fileName:"MyOtherStream\\PrintStreamDemo.java"));//打印流只能写数据 不能读数据 PrintWriter pw = PrintWriter(new FileWriter(fileName:"MyOtherStream\\Copy.java"),autoFlush:true);//读写数据复制文件//应用字符缓冲流特有性能实现String line;while((line = br.readLine())!=null){ pw.println(line);}//开释资源pw.close();br.close();
非凡操作流
对象序列化流
就是将对象保留到磁盘中,或者再网络中传输对象
//创建对象序列化流的对象ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(name:"MyOtherStream\\oos.txt"));//创建对象Student s = new Student(name:"林青霞",age:30);//将指定的对象写入ObjectOutputStreamoos.writeObject(s);//开释资源oos.close();
类要实现implements Serializable
序列化接口仅仅是一个标识接口,如果一个类实现了这个接口,这个类的对象能够被序列化和反序列化
对象反序列化流
//创建对象反序列化流的对象ObjectInputStream ois = new ObjectInputStream(new FileInputStream(name:"MyOtherStream\\oos.txt"));//从ObjectInputStream读取一个对象Object obj = ois.readObject();//做一个向下转型Student s = (Student) obj;sout(s.getName()+","+s.getAge());//开释资源ois.close();
对象序列化流问题
重写toSring办法会报错
给定了一个固定的序列化ID值
private static final long SerialVersiousUID = 数字
对象中的某个成员变量的值不想被序列化能够增加关键字transient
private transient int age;
Properties
作为Map汇合的特有办法
不能用泛型,类不是泛型类
//创立汇合对象Properties<String,String> prop = new Properties<String,String>();//这样不对//应该如下Properties prop = new Properties();//存储元素prop.put("itheima001","林青霞");//遍历汇合set<Object> keySet = prop.keySet();//失去所有键的汇合for(Object key : keySet){ Object value = prop.get(key); sout();}
作为汇合的特有办法
//创立汇合对象Properties prop = new Properties();//设置汇合的键盒值,都是String类型,底层调用Hashtable办法putprop.setProperty("itheima001","林青霞");//应用此属性列表中指定的键搜寻属性sout(prop.getProperty("itheima001"));//依据键失去对应的值//从该属性列表中返回一个不可批改的键集,其中键对应的值是字符串Set<String> names = prop.stringPropertyNames();for(String key :names){ sout(key)//输入键 String value = prop.getProperty(key); sout(key+value)//输入键和值}
和IO流联合的办法
//把汇合中的数据保留到文件myStore();//对应的办法private static void myStore(){ Properties prop = new Properties(); prop.setProperty("itheima001","林青霞"); //把汇合中数据保留到文件 FileWriter fw = new FileWriter(fileName:"MyOtherStream\\fw.txt"); prop.store(fw,comments:null); //将属性列表的键和元素写入这个Properties表中,commenrts是一个形容信息 如果没有形容信息就是null }//文件中的数据加载到汇合myLoad();//对应的办法private static void myLoad(){ Properties prop = new Properties(); //将文件读取显示进去 FileReader fr = new FileReader(fileName:"MyOtherStream\\fw.txt"); prop.load(fr);//输出字符流读取属性列表 fr.close(); sout(prop);
案例 游戏次数
游戏类
//main办法//从文件中读取数据到Properties汇合,用load办法实现Properties prop = new Properties();FileReader fr = new FileReader(fileName:"MyOtherStream\\fw.txt");//调用文件prop.load(fr);//输出字符流读取属性列表 把文件中的数据加载到汇合中fr.close();//通过汇合获取到玩游戏的次数String count = prop.getProperty("count");//返回是一个字符串//要转换为int类型int number = Integer.parseInt(count);//判断次数是否到三次了if(number = 3){ //如果到了给出提醒,游戏已完结 sout("游戏完结")}else{ //玩游戏 GuessNumber.start(); //次数+1 从新写回文件 用Properties的store()实现 number++; prop.setProperty("count",String.valueOf(number));//文件中的数据要进行批改 //批改后的数据从新写回文件 FileWriter fw = new FileWriter(fileName:"MyOtherStream\\fw.txt"); prop.store(fw,comments:null); fw.close();}