数据流
可以读写基本数据类型的数据
数据输入流: DataInputStream
DataInputStream(InputStream in)
数据输出流: DataOutputStream
DataOutputStream(OutputStream out)
privatestaticvoid read() throws IOException {
// DataInputStream(InputStream in)
// 创建数据输入流对象
DataInputStream dis = newDataInputStream( new FileInputStream("dos.txt"));
// 读数据
byte b = dis.readByte(); short s = dis.readShort(); int i = dis.readInt();
long l = dis.readLong(); float f = dis.readFloat();
double d = dis.readDouble();
char c = dis.readChar();
boolean bb = dis.readBoolean();
// 释放资源
dis.close();
}
privatestaticvoid write() throws IOException {
// DataOutputStream(OutputStream out)
// 创建数据输出流对象
DataOutputStream dos = new DataOutputStream(new FileOutputStream( "dos.txt" ));
// 写数据了
dos.writeByte(10);
dos.writeShort(100); dos.writeInt(1000); dos.writeLong(10000); dos.writeFloat(12.34F); dos.writeDouble(12.56); dos.writeChar('a'); dos.writeBoolean(true);
// 释放资源
dos.close();
}
内存操作流
用于处理临时存储信息的,程序结束,数据就从内存中消失。
字节数组:ByteArrayInputStream ByteArrayOutputStream
字符数组:CharArrayReader CharArrayWriter
字符串:StringReader StringWriter
// ByteArrayOutputStream()
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 写数据
for ( int x = 0; x < 10; x++) {
baos.write(("hello" +x ).getBytes());
}
// 释放资源
// 通过查看源码我们知道这里什么都没做,所以根本不需要 close()
// baos.close();
// public byte[] toByteArray()
byte []bys = baos.toByteArray();
// 读数据
// ByteArrayInputStream(byte[] buf)
ByteArrayInputStream bais = new ByteArrayInputStream(bys);
int by = 0;
while((by = bais.read()) != -1) {
System. out .print((char) by );
}
// bais.close();
打印流
(1)字节打印流,字符打印流
(2)特点:
A:只操作目的地 ,不操作数据源
B:可以操作任意类型的数据
C:如果启用了自动刷新,在调用 println() 方法的时候,能够换行并刷新
D:可以直接操作文件
问题:哪些流可以直接操作文件呢 ?
看 API,如果其构造方法能够同时接收 File 和 String 类型的参数,一般都是可以直接操作文件的
(3)案例:复制文本文件
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
PrintWriter pw = new PrintWriter(new FileWriter("b.txt"),true);
String line = null ;
while ((line=br.readLine())!=null ) {
pw.println(line );
}
pw.close();
br.close();
标准输入输出流 ( 理解即可 )
System 类下面有这样的两个字段:in 标准输入流 / out 标准输出流
(2)三种键盘录入方式
A:main 方法的 args 接收参数
B:System.in 通过 BufferedReader 进行包装
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
C:Scanner
Scanner sc = new Scanner(System.in);
(3)输出语句的原理和如何使用字符流输出数据
A:原理 System.out.println("helloworld"); PrintStream ps = System.out; ps.println("helloworld");
B:把 System.out 用字符缓冲流包装一下使用
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));