JAVA笔记25-IO流(3)-处理流举例
处理流类型:
1、缓冲流
例1:
import java.io.*;
public class TestBufferStream{
public static void main(String args[]){
try{
FileInputStream fis = new FileInputStream("TestCopyByMyself.java");
BufferedInputStream bis = new BufferedInputStream(fis);
int c = 0 ;
System.out.println((char)bis.read());
System.out.println((char)bis.read());
bis.mark(100);//做标记,没看懂API
for(int i=0; i<=10&&(c=bis.read()) != -1; i++){
System.out.print((char)c+" ");
}
System.out.println();
bis.reset();//回到标记的位置
for(int i=0; i<=10&&(c=bis.read()) != -1; i++){
System.out.print((char)c+" ");
}
bis.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
例2:BufferedWriter BufferedRead 应用非常普遍(记住)
import java.io.*;
public class TestBufferStream{
public static void main(String args[]){
try{
BufferedWriter bw = new BufferedWriter(new FileWriter("TestCopyByMyself.java"));
BufferedReader br = new BufferedReader(new FileReader("TestCopyByMyself.java"));
String s = null ;
for(int i=0; i<=100; i++){
s = String.valueOf(Math.random());//返回字符串表示形式
bw.write(s);
bw.newLine();
}
bw.flush();
while((s=br.readLine())!= null){
System.out.println(s);
}
bw.close();
br.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
2、转换流(重要)
例1:
import java.io.*;
public class TestTransForm{
public static void main(String args[]){
try{
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("TestCopyByMyself.java"));
osw.write("fgatwesdghruklotueo");
System.out.println(osw.getEncoding());
osw.close();
osw = new OutputStreamWriter(new FileOutputStream("TestCopyByMyself.java",true),"ISO8859_1");//true是在原文件基础上追加,否则覆盖原内容
//ISO8859_1是字符编码,默认编码GBK
osw.write("fgatwesdghruklotueo");
System.out.println(osw.getEncoding());
osw.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
例2、典型用法
import java.io.*;
public class Test{
public static void main(String args[]){
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String s = null ;
try{
while((s = br.readLine())!=null){
if(s.equalsIgnoreCase("exit"))
break;
System.out.println(s.toUpperCase());
}
br.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
3、数据流
例1
import java.io.*;
public class TestDataStream{
public static void main(String args[]){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
try{
dos.writeDouble(Math.random());
dos.writeBoolean(true);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
System.out.println(bais.available());//字节数=9
DataInputStream dis = new DataInputStream(bais);
System.out.println(dis.readDouble());
System.out.println(dis.readBoolean());
dos.close();
dis.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
输出:
9
0.5303779743857895
true
练习:自己读写文件,注意文件中显示的并非double+boolean
import java.io.*;
public class Test{
public static void main(String [] args){
String filename = "data.txt";
try{
DataOutputStream dos = new DataOutputStream(new FileOutputStream(filename));
DataInputStream dis = new DataInputStream(new FileInputStream(filename));
dos.writeDouble(6.7);
dos.writeInt(3);
System.out.println(dis.available());
System.out.println(dis.readDouble());
System.out.println(dis.readInt());
dos.close();
dis.close();
}catch(IOException e){
e.printStackTrace();
} }
}
4、Print流
例1:
import java.io.*;
public class TestPrintStream{
public static void main(String args[]){
PrintStream ps = null ;
try{
FileOutputStream fos = new FileOutputStream("log.dat");
ps = new PrintStream(fos);
}catch(IOException e){
e.printStackTrace();
}
if(ps!=null){
System.setOut(ps);//System.out中的out默认是命令行,setOut可以改变out的值,这里out指向ps。
}
int ln = 1;
for(char c=0;c<=6000;c++){
System.out.print(c+" ");
if(ln++>=10){
System.out.println();
ln = 1;
}
}
} }
例2:
import java.io.*;
//输入文件名,读该文件内容
public class TestPrintStream{
public static void main(String args[]){
if(args.length<=0)
return;
String filename = args[0];
if(filename!=null){
list(filename,System.out);
}
}
public static void list(String f, PrintStream fs){
try{
BufferedReader br = new BufferedReader(new FileReader(f));
String s = null;
while((s = br.readLine())!=null){
fs.println(s);
}
br.close();
}catch(IOException e){
fs.println("无法读取文件");
}
}
}
例3:日志
import java.io.*;
import java.util.*;
public class TestPrintStream{
public static void main(String args[]){
String s = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try{
FileWriter fw = new FileWriter("logfile.log",true);
PrintWriter log = new PrintWriter(fw);
while((s = br.readLine())!=null){
if(s.equalsIgnoreCase("exit"))
break;
System.out.println(s.toUpperCase());
log.println("-----");
log.println(s.toUpperCase());
log.flush();
}
log.println("==="+new Date()+"===");
log.flush();
log.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
日志的另一种写法(by myself):
import java.io.*;
import java.util.*;
public class Test{
public static void main(String [] args){
String filename = "log.txt" ;
String line = null ;
try{
InputStreamReader fr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(fr);
FileWriter fw = new FileWriter(filename);
/*
PrintWriter pw = new PrintWriter(fw); while((line = br.readLine()) != null){
if(line.equalsIgnoreCase("exit")){
break;
}
pw.println(line);
}
pw.write("==="+new Date()+"===");
pw.flush();
pw.close();
*/
BufferedWriter bw = new BufferedWriter(fw);
while((line=br.readLine()) != null){
if(line.equalsIgnoreCase("exit")){
break;
}
bw.write(line);
bw.newLine();
}
bw.write("==="+new Date()+"===");
bw.flush();
bw.close();
}catch(IOException e){
e.printStackTrace();
} }
}
5、Object流
直接将Object写入或读出。
必须实现seriallzable接口(序列化),是标记性接口,JDK控制序列化过程。
transient关键字修饰的成员变量在序列化时不考虑,即只写入其他三个,而忽略该成员变量。
externalizable接口(外部化),是seriallzable的子接口。此外还有两个方法,自己控制序列化过程。
例1:
import java.io.*;
public class Test{
public static void main(String [] args){
String filename = "obj.txt";
Obj o = new Obj();
try{
FileOutputStream fos = new FileOutputStream(filename);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(o);
oos.flush();
oos.close();
FileInputStream fis = new FileInputStream(filename);
ObjectInputStream ois = new ObjectInputStream(fis);
Obj obj = (Obj)ois.readObject();
System.out.println(obj.a+" "+obj.b+" "+obj.c);
}catch(IOException e){
e.printStackTrace();
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
} class Obj implements Serializable{
int a = 1 ;
String b = "good" ;
transient int c = 9 ;
}
输出:
1 good 0
总结:
JAVA笔记25-IO流(3)-处理流举例的更多相关文章
- JAVA笔记12__字节、字符缓冲流/打印流/对象流/
/** * !!:以后写流的时候一定要加入缓冲!! * 对文件或其它目标频繁的读写操作,效率低,性能差. * 缓冲流:好处是能更高效地读写信息,原理是将数据先缓冲起来,然后一起写入或读取出来. * * ...
- Java笔记(二十六)……IO流上 字节流与字符流
概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...
- Java编程思想学习笔记_5(IO流)
一.用DataInputStream读取字符 可以使用available方法查看还有多少可供存取的字符.示例如下: public class Test1 { public static void ma ...
- Java基础知识强化之IO流笔记65:序列化流 和 反序列化流
1. 什么是 序列化 和 反序列化 ? 序列化 (Serialization):将对象的状态信息转换为可以存储或传输的形式的过程.比如转化为二进制.xml.json等的过程. 在序列化期间,对 ...
- Java学习笔记29(IO字符流,转换流)
字符流:只能操作文本文件,与字节流的区别是,字节流是按照字节来读取文件,而字符流是按照字符来读取,因此字符流的局限性为文本文件 字符输出流:Write类,使用时通过子类 每一次写入都要刷新 pac ...
- Java基础知识_毕向东_Java基础视频教程笔记(19-21 IO流)
18天-06-IO流 字节流和字符流 字节流两个基类:InputStream,FileInputStream,BufferedInputStream OutputStream,FileOutputSt ...
- java学习笔记之IO编程—内存流、管道流、随机流
1.内存操作流 之前学习的IO操作输入和输出都是从文件中来的,当然,也可以将输入和输出的位置设置在内存上,这就需要用到内存操作流,java提供两类内存操作流 字节内存操作流:ByteArrayOutp ...
- java 笔记(4) —— java I/O 流、字节流、字符流
Java中使用流来处理程序的输入和输出操作,流是一个抽象的概念,封装了程序数据于输入输出设备交换的底层细节.JavaIO中又将流分为字节流和字符流,字节流主要用于处理诸如图像,音频视频等二进制格式数据 ...
- 详细讲解JAVA中的IO流
一.流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. ...
- Java基础:IO流之字节流和字符流
1. 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. 一个流,必有源端和目的端 ...
随机推荐
- 如何在win10上运行httpRunner的api_server服务
将下载的api_server.py放在d:/code文件夹下 安装flask :pip install flask 切换到d:/code文件夹下 浏览器打开地址:http://127.0.0.1:50 ...
- 手机连接电脑,使用adb命令
手机连接电脑使用adb命令,主要是有2种方式,其中最常见的就是第一种,用usb连线使用 1:adb usb - restarts the adbd daemon listening on USB ad ...
- 如何理解springcloud微服务项目中,eureka,provider,consumer它们之间的关系?
eureka负责注册provider和consumer的服务信息 provider负责与数据库进行交互,实现数据持久化,并给consumer提供服务 consumer与前端交互,通过与Eureka同源 ...
- 【Qt开发】QTextEdit 外观属性设置
一.给QTextEdit添加背景图片,有下面两种方法: QTextEdit* iEdit = new QTextEdit(); 1:使用样式表: iEdit->setStyleSheet(&q ...
- Excel透视表进阶之计算字段、计算项、切片器、页面布局
计算字段 在透视表的字段列表中通过函数.公式等方式构建一个新的字段 又称虚拟字段,因为计算字段不会出现在数据源中,对于普通字段的操作,都可以对计算字段进行操作 计算字段只能出现在值区域,不能出现在筛选 ...
- tp5框架用foreach循环时候报Indirect modification of overloaded element of think\paginator\driver\Bootst错误
thinkphp5使用paginator分页查询数据后,需要foreach便利处理某一字段的数据,会出现类似题目的错误.主要是因为tp5使用分页类读取的数据不是纯数组的格式!所以在循环的时候需要用数据 ...
- 實現QQ第三方登錄
<?php // 写几个函数,分别用于获取code,token,openid,用户信息 // 跳转到QQ授权登录页面 function code(){ $response_type='code' ...
- 剑指offer-顺时针打印矩阵-数组-python
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...
- Linux知识补课
Linux补课 已经将开发环境转Linux了(当然用的是ubuntu,图像界面还是舒服一点,支持也多),不上QQ和微信的话用的还是挺舒服的,但是无奈基础欠账太多,这里赶快补一下 Linux和Unix的 ...
- call apply bind sleep
1.自己实现一个call 1)利用对象的方式的形式改变this指针 funcion add; add.call(temObj) 只需要 在temObj对象临时添加一个方法即可 Function.pro ...