1.操作基本数据类型的数据流
数据输入流:DataInputStream
DataInputStream(InputStream in)
数据输出流:DataOutputStream
DataOutputStream(OutputStream out)
用法和字节流基本一样,只是该流用来读写基本数据类型的数据。
/*
* 输出流
*/
//封装资源创建对象
DataOutputStream dos = new DataOutputStream(new FileOutputStream("dos.txt")) ;
//写出数据
dos.writeByte(100);
dos.writeShort(99);
dos.writeInt(98);
dos.writeLong(97);
dos.writeFloat(96.96F);
dos.writeDouble(95.9595);
dos.writeChar('C');
dos.writeBoolean(false);
//释放资源
dos.close();
/*
* 输入流
*/
//封装资源创建对象
DataInputStream dis = new DataInputStream(new FileInputStream("dos.txt")) ;
//读取数据,必须按照顺序读
byte b = dis.readByte() ; //100
short s = dis.readShort() ;//99
int i = dis.readInt() ;//98
long l = dis.readLong() ;//97
float f = dis.readFloat() ;//96.96
double d = dis.readDouble() ;//95.9595
char c = dis.readChar() ;//C
boolean bb = dis.readBoolean() ;//false
//释放资源
dis.close();
System.out.println(b+"\n"+s+"\n"+i+"\n"+l+"\n"+f+"\n"+d+"\n"+c+"\n"+bb);
2.内存操作流 :用于处理临时存储信息的,程序结束,数据就从内存中消失(因此内存流的close()方法是无意义的)
字节数组:
ByteArrayInputStream:
ByteArrayOutputStream:
字符数组:
CharArrayReader:
CharArrayWriter:
字符串:
StringReader:
StringWriter:
/*
* 字节数组,(字符数组和字符串用法类似)
*/
//写入数据
ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
for (int i = 0; i < 10 ; i++) {
bos.write(("hello"+i).getBytes());
}
//因为是存在内存中,所以无法查看
//查看源码可以知道,close()没有执行任何操作,是无意义的,因此可以不需要
//bos.close();
byte[] by = bos.toByteArray() ;
//读取数据
ByteArrayInputStream bis = new ByteArrayInputStream(by) ;
int b = 0 ;
while((b = bis.read()) != -1){
System.out.print((char)b);
}
//bis.close();
3.打印流
字节打印流:PrintStream
字符打印流:PrintWrite
打印流的特点:
A:只有些数据的流,没有读取数据的,只能操作目的地址,不能操作数据源
B:可以操作任意类型的数据
使用其特殊的方法
print()
println()
C:如果启动了自动刷新,能够自动更新。
PrintWriter pw = new PrintWriter(new FileWriter(“pw.txt”),true) ;
但是必须要调用println()方法,这样不仅能实现自动刷新,还能实现换行。
即println()一句等价于以下三句:
bw.write() ;
bw.nextLine() ;
bw.flush() ;
D:该流是可以直接操作文本文件的。
哪些对象是可以直接操作文本文件的呢?
FileOutputStream
FileInputStream
FileReader
FileWriter
PrintWriter
PrintStream
注意:看API,如果构造方法里同时有File类型的和String类型的参数,一般来说可以直接操作文件
根据是否可以直接操作文件,可以把流分为:
基本流:可以直接读写文件
高级流:在基本流的基础上提供了一些其他功能
4.标准输入输出流
System类中的两个成员变量:
public static final InputStream in : ”标准“输入流
public static final PrintStream out :“标准”输出流
由上可知,
InputStream is = System.in ;
PrintStream ps = System.out ;
System.in的本质其实就是InputStream is
System.out的本质其实就是PrintStream ps
所以我们可以知道
System.out.println() = ps.println()
而System.out.print不存在的原因是因为 ps.print()不存在
三种键盘录入方式:
A:main()方法的args接收参数
B:Scanner(JDK5以后)
Scanner input= new Scanner(System.in) ;
String s = input.nextLine() ;
int x = input.nextInt() ;
..
C:通过字符缓冲流包装标准输入流实现
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) ;
5.随机访问流