其他流的使用(1- 输入、输出流 2-打印流 3- 数据流 4- 对象流 )
内容:
1-输入、输出流:
public static void main(String[] args) {
//1- 标准的输入,输出流
BufferedReader bufferedReader = null;
try {
//这个部分可以不用修改
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
bufferedReader = new BufferedReader(inputStreamReader);
//按照自己需求修改
while (true) {
System.out.println("请输入内容");
String date = bufferedReader.readLine();
if ("e".equals(date) || "exit".equals(date)) {
System.out.println("你已经输入e/exit,退出");
break;
}
String upperCase = date.toUpperCase();//将内容转化成大写
System.out.println(upperCase);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bufferedReader != null)
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2- 打印流
//打印流
//打印流--会使本来应该出现在终端的文件,出现在你"规定的文件"里面
@Test
public void test2() {
PrintStream printStream = null;
try {
//常规打印流操作(开头的这一段,可以不用修改)
FileOutputStream fileOutputStream = new FileOutputStream(new File("/Users/ccc/Desktop/testIO/I_Love.txt"));
printStream = new PrintStream(fileOutputStream, true);
if (printStream != null) {
System.setOut(printStream);
}
//具体出现的内容(下面这段,循环操作的,内容,可以修改成你需要的--代码)
for (int i = 0; i <= 100; i++) {
System.out.println("我爱你");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (printStream != null)
try {
printStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
3- 数据流
// 数据流
//DateInputStream 和 DataOutputStream
//作用:用于"读取"或者"写出"基本数据类型的变量或者字符串(使数据持久化,就把它变成一个文件的形式)
@Test
//注:这里的异常,还是应该ry-catch,我只是为了,代码块的简洁,才用throws
public void test() throws IOException {
//持久化文件的路径
DataOutputStream dateOutputStream = new DataOutputStream(new FileOutputStream("/Users/ccc/Desktop/testIO/DataPersistence.txt"));
dateOutputStream.writeUTF("陈谢谢");
dateOutputStream.flush();
dateOutputStream.write(17);
dateOutputStream.flush();
dateOutputStream.writeBoolean(true);
//注意:这样生成的文件,不能"双击打开直接读",应该用--DateInputStream来读(在下面)
}
@Test
public void test1() throws IOException {
//1-读取"上面"持久化文件的路径
DataInputStream dataInputStream = new DataInputStream(new FileInputStream("/Users/ccc/Desktop/testIO/DataPersistence.txt"));
//2- 按顺序,从头到尾,读取信息
String s = dataInputStream.readUTF();
int i = dataInputStream.readInt();
boolean b = dataInputStream.readBoolean();
System.out.println(s);
System.out.println(i);
System.out.println(b);
dataInputStream.close();
}
4- 对象流
对象流的理解:
对象流
1- ObjectInputStream 和 ObjectOutputStream
ObjectInputStream -- 序列化---"保存""基本数据类"或者"对象"的机制
ObjectOutputStream --反序列化 --"读取""基本类型数据"或者"对象"的机制
2- 作用:用于"储存和读取--基本数据类型"或者"对象"的处理流。他的强大之处就是可以吧java中的对象写到数据源中
也可以吧对象从数据源汇总还原回来。
对象流的--序列号和反序列化
public class Object_InputOutputStreamTest {
@Test
public void testObjectOutputStream() {
//序列化
//-将终端中的java对象,保存到文件形式 --(写出的形式)
ObjectOutputStream objectOutputStream = null;
try {
//1-
objectOutputStream = new ObjectOutputStream(new FileOutputStream("Object.txt"));
//2-
objectOutputStream.writeObject(new String("我爱你-我滴宝"));
//3-
objectOutputStream.flush();//刷新
} catch (IOException e) {
e.printStackTrace();
} finally {
if (objectOutputStream != null) {
try {
//4-
objectOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} //创建的-Object.txt不能"双击"直接打开看,如果想看,要用"反序列化"来看
}
@Test
public void testObjectInputStream () {
ObjectInputStream objectInputStream = null;
try {
objectInputStream = new ObjectInputStream(new FileInputStream(new File("Object.txt")));
Object read = objectInputStream.read();
//String s = (String) read;
System.out.println("对上面的文件,进行反序列化的内容 = "+read);
} catch (IOException e) {
e.printStackTrace();
} finally {
if(objectInputStream != null)
try {
objectInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//附加:如果那些要对"自定义类",进行,反序列化操作 eg:person、account
//1- 在"自定义类"上要实现 --接口:Serializable
//2- 单曲类提供一个,全局变量:serialVersionUID
//3- 除了"第一个类person"如果后面还有dog、cat类,都需要执行(上面1-2)操作,必须保证内部属性也是必须可序列号的
//(默认情况,基本数据类型可序列号)
}