package heima;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;public class P312 {public static void main(String[] args) throws IOException {//public static final InputStream in:标准输入流InputStream is =System.in;// //1.只能输入字符
// int by;
// while ((by = is.read())!=-1){
// System.out.println((char) by);
// }
// //2.把字符转换为字符流
// InputStreamReader isr = new InputStreamReader(is);//3.实现字符流一次读取一行数据BufferedReader br = new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入一个字符串:");String line = br.readLine();System.out.println("你输入的字符串是:"+line);System.out.println("请输入一个整数:");int i = Integer.parseInt(br.readLine());System.out.println("你输入的整数是:"+i);}
}
输出:
自己实现太麻烦,java提供了一个供我们使用的方法
Scanner sc = new Scanner(System.in)
package heima;import java.io.PrintStream;public class P313 {public static void main(String[] args) {//pulic sattic final PrintStream out:标准输出流PrintStream ps = System.out;//能够方便地打印各种数据
// ps.print("hello");
// ps.print(100);
//
// ps.println("hello");
// ps.println(100);//System.out的本质是一个字节输出流System.out.println("hello");System.out.println(100);System.out.println();
// System.out.print();}}
注意:直接System.out.print();不带参数,是错误的
转码:指转为对应的ASCII码
package heima;import java.io.FileNotFoundException;
import java.io.PrintStream;public class P314 {public static void main(String[] args) throws FileNotFoundException {//PrintStream(String fileName):使用指定的文件名创建新的打印流PrintStream ps = new PrintStream("C:\\Users\\路聃\\Desktop\\Java\\ps.txt");//写数据//字节输出流有的方法ps.write(97); //a//使用特有方法写数据ps.print(97); //97//释放资源ps.close();}
}
package heima;import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;public class P315 {public static void main(String[] args) throws IOException {//PrintWriter(String fileName):使用指定的文件名创建一个新的PrintWriter,而不需要自动执行行的刷新
// PrintWriter pw = new PrintWriter("C:\\Users\\路聃\\Desktop\\Java\\pw.txt");
//
// pw.write("hello");
// pw.write("\r\n");
// pw.flush();
// pw.write("world");
// pw.write("\r\n");
// pw.flush();
//
// pw.println("hello");//输出失败
// /*原因
// pw.write("hello");
// pw.write("\r\n");
// *///PrintWriter (Writer out,boolean autoFlush):创建一个新的PrintWriterPrintWriter pw = new PrintWriter(new FileWriter("C:\\Users\\路聃\\Desktop\\Java\\pw.txt"),true);//true代表开启自动刷新flush()pw.println("hello");pw.println("world");}
}
package heima;import java.io.*;public class P316 {public static void main(String[] args) throws IOException {/*//根据数据源创建字符输入流对象BufferedReader br = new BufferedReader(new FileReader("C:\\IntelliJ IDEA Community Edition 2022.2.3\\study\\src\\heima\\P315.java"));//根据目的地创建字符输出流对象BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\Users\\路聃\\Desktop\\Java\\ts.java"));//读写数据,复制文件String line;while ((line=br.readLine())!=null){bw.write(line);bw.newLine();bw.flush();}//释放资源bw.close();br.close();*///根据数据源创建字符输入流对象BufferedReader br = new BufferedReader(new FileReader("C:\\IntelliJ IDEA Community Edition 2022.2.3\\study\\src\\heima\\P315.java"));//根据目的地创建字符输出流对象PrintWriter pw = new PrintWriter(new FileWriter("C:\\Users\\路聃\\Desktop\\Java\\te.java",true));//读写数据,复制文件String line;while ((line=br.readLine())!=null){pw.println(line);}//释放资源pw.close();br.close();}
}
一定要在类中定义一个标记接口Serializable
package heima;import heima.common.Student;import java.io.*;public class P317 {public static void main(String[] args) throws IOException {//ObjectOutputStream (OutputStream out):创建一个写入指定的OutputStrem的ObjectOutputStreamObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream( "C:\\Users\\路聃\\Desktop\\Java\\oos.txt"));//创建对象Student s = new Student("小林",30);//void writeObject(Object obj):将指定的对象写入ObjectOutputStreamoos.writeObject(s);//释放资源oos.close();}
}
输出上面的序列流
package heima;import heima.common.Student;import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;public class P318 {public static void main(String[] args) throws IOException, ClassNotFoundException {//ObjectInputStream(InputStream in):创建从指定的InputStream读取的ObjectInputStreamObjectInputStream ois = new ObjectInputStream(new FileInputStream("C:\\Users\\路聃\\Desktop\\Java\\oos.txt"));//Objext readObject():从ObjectInputStream读取一个对象Object obj = ois.readObject();Student s = (Student) obj;System.out.println(s.getName()+","+s.getAge());ois.close();}
}
package heima;import heima.common.Student;import java.io.*;public class P319 {public static void main(String[] args) throws IOException, ClassNotFoundException {write();
// read();}//序列化private static void write() throws IOException {ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("C:\\Users\\路聃\\Desktop\\Java\\oos.txt"));Student s = new Student("小林",30);oos.writeObject(s);oos.close();}//反序列化private static void read() throws IOException, ClassNotFoundException {ObjectInputStream ois = new ObjectInputStream(new FileInputStream("C:\\Users\\路聃\\Desktop\\Java\\oos.txt"));Object obj = ois.readObject();Student s = (Student) obj;System.out.println(s.getName()+","+s.getAge());ois.close();}
}
对上述代码,若在read()执行后,改动类Student内容,再执行write()则报错。
原因
需要对Student进行如下改动:
package heima;import java.util.Objects;
import java.util.Properties;
import java.util.Set;public class P320 {public static void main(String[] args) {//创建集合对象//1.err --想当然的把Properties当作泛型
// Properties prop = new Properties();Properties prop = new Properties();//存储元素prop.put("item01","小林");prop.put("item02","小王");prop.put("item03","小雨");//遍历集合Set
package heima;import java.util.Properties;
import java.util.Set;public class P321 {public static void main(String[] args) {//创建集合对象Properties prop = new Properties();//Object setProperty(String key,String value):设置集合的键和值,都是String类型,底层调用Hashtable方法putprop.setProperty("item01","小林");/* 方法来源Object setProperty(String key,String value){return put(key,value);}Object put(Object key,Object value){return map.put(key,value);}设计:把一个接受Object对象的方法,改为只能接受String对象,设计巧妙*/prop.setProperty("item02","小张");prop.setProperty("item03","小文");//String getProperty(String key):使用此属性列表中指定的键搜索属性System.out.println(prop.getProperty("item01"));System.out.println(prop);//Set stringPropertyNames():从该属性列表中返回一个不可修改的键集,其中键及其对应的值是字符串Set names = prop.stringPropertyNames();for (String key : names){
// System.out.println(key);//输出所以的键名String value = prop.getProperty(key);System.out.println(key+","+value);//输出键和对应的值}}
}
package heima;import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;public class P322 {public static void main(String[] args) throws IOException {//把集合中的数据保存到文件
// myStore();//把文件中的数据加载到集合myLoad();}private static void myLoad() throws IOException, IOException {Properties prop = new Properties();//void load(Reader reader):FileReader fr = new FileReader("C:\\Users\\路聃\\Desktop\\Java\\fw.txt");prop.load(fr);fr.close();System.out.println(prop);}private static void myStore() throws IOException {Properties prop = new Properties();prop.setProperty("item01","小林");prop.setProperty("item02","小王");prop.setProperty("item03","小黄");//void store(Writer writer,String comments):FileWriter fw = new FileWriter("C:\\Users\\路聃\\Desktop\\Java\\fw.txt");prop.store(fw,null);fw.close();}
}
输出:
先只执行myStore(),再只执行myLoad()
package heima;import heima.common.GuessNumber;import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;public class P323 {public static void main(String[] args) throws IOException {//从文件中读取数据到Properties集合,用load()方法实现Properties prop = new Properties();FileReader fr = new FileReader("C:\\Users\\路聃\\Desktop\\Java\\game.txt");prop.load(fr);fr.close();//通过Properties集合获取到玩游戏的次数String count = prop.getProperty("count");int number = Integer.parseInt(count);//判断次数是否到达3次了if (number >= 3){//如果到了System.out.println("游戏试玩已结束,想玩请充值(www.itcast.cn)");}else {//继续玩游戏GuessNumber.start();//次数+1,重新写回文件,用Properties的store()方法实现number++;//String.valueOf():转换位字符串prop.setProperty("count",String.valueOf(number));FileWriter fw = new FileWriter("C:\\Users\\路聃\\Desktop\\Java\\game.txt");prop.store(fw,null);fw.close();}}
}
//1 load
//2 store
GuessNumber.java
package heima.common;import java.util.Random;
import java.util.Scanner;public class GuessNumber {private GuessNumber(){}public static void start(){//要完成猜数字的游戏,首先要有一个要猜的数字,使用随机数生成该数字,范围1到200Random r = new Random();int number = r.nextInt(100)+1;while (true){Scanner sc = new Scanner(System.in);System.out.println("请输入你要猜的数字:");int guessNumber = sc.nextInt();//比较输入的数字喝系统产生的数据if (guessNumber > number){System.out.println("你猜的的数字"+guessNumber+"大了");}else if (guessNumber System.out.println("你猜的数字"+guessNumber+"小了");}else {System.out.println("恭喜你猜中了");break;}}}
}