------- android培训、java培训、期待与您交流!----------
IO流:
笔记内容:转换流,字节输入输出流,数据输入输出流,内存操作流,随机访问流
打印流,对象序列化流,Properties
一.转换流
转换流:实际就是字符流
OutputStreamWriter:输出转换流
构造方法:
传入一个相应的字节流,返回一个相应的字符流,而这个字符流就是转换流对象
注意:
在使用过程中:将字节流对象转成字符流对象
在本质上:字符流通向字节流的桥梁
InputStreamReader:输入转换流
构造方法:
传入一个相应的字节流,返回一个相应的字符流,而这个字符流就是转换流对象
注意:
在使用过程中:将字节流对象转成字符流对象
在本质上:字节流通向字符流的桥梁
代码演示:
[java] view plaincopy
package cn.itcast2;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
public class Demo5 {
public static void main(String[] args) throws IOException {
method();
}
//转换流作为字符流完成文件复制
public static void method() throws IOException {
InputStream is = new FileInputStream("g.txt");
InputStreamReader isr = new InputStreamReader(is);
OutputStream os = new FileOutputStream("h.txt");
OutputStreamWriter osw = new OutputStreamWriter(os);
int c;
while((c=isr.read())!=-1) {
osw.write(c);
}
osw.close();
isr.close();
}
}
二.字节输入输出流
System.in:字节输入流;从控制台读入;名为标准输入流
System.out:字节输出流;输出到控制台;名为标准输出流
代码演示:
[java] view plaincopy
package cn.itcast2;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
/*
* 从控制台读取,再写到控制台中去
*/
public class Demo7 {
public static void main(String[] args) throws IOException {
//创建字节流对象
InputStream is = System.in;
OutputStream os = System.out;
//创建字符流对象
InputStreamReader isr = new InputStreamReader(is);
OutputStreamWriter osr = new OutputStreamWriter(os);
//创建高效字符流对象
BufferedReader br = new BufferedReader(isr);
BufferedWriter bw = new BufferedWriter(osr);
//读
String line;
while((line=br.readLine())!=null) {
//定义停止输入的标记字符串
if("byebye".equals(line)) {
break;
}
//写
bw.write(line);
bw.newLine();
bw.flush();
}
//关闭流
osr.close();
isr.close();
}
}
三.数据输入输出流:
DataOutputStream:数据输出流
public final void writeXxx(xx x) throws IOException 写出XXX类型的数据
DataInputStream:数据输入流
public final byte readXxx(xx x) throws IOException 读入Xxx类型的数据
按照相同的顺序读写
代码演示:
[java] view plaincopy
package cn.itcast;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws IOException {
// FileWriter fw = new FileWriter("a.txt");
// fw.write("10");
// fw.close();
int a = 983;
[java] view plaincopy
<span style="white-space:pre"> </span>//创建数据输出流对象
[java] view plaincopy
DataOutputStream dos = new DataOutputStream(new FileOutputStream("a.txt"));
dos.writeInt(a);
dos.writeBoolean(true);
dos.writeChar('a');
dos.writeDouble(365);
dos.writeUTF("i love java 中国");
dos.close();
//创建数据输入流对象
DataInputStream dis = new DataInputStream(new FileInputStream("a.txt"));
System.out.println(dis.readInt());
System.out.println(dis.readBoolean());
System.out.println(dis.readChar());
System.out.println(dis.readDouble());
System.out.println(dis.readUTF());
dis.close();
}
}
四.内存操作流:
不需要调用底层资源的IO流
ByteArrayOutputStream:字节数组输出流 即将数据写到数组中
ByteArrayInputStream:字节数组输入流 即从数组中读取
CharArray 与 String 是相同的思路
代码演示:
[java] view plaincopy
package cn.itcast;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Arrays;
public class Demo2 {
public static void main(String[] args) {
/*
* CharArrayReader:从数组中读去字符
* CharArrayWriter:将字符写到数组中
* StringWriter:将字符写到字符串中
* StringReader:从字符串中读取数据
*/
//创建IO流对象
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//向缓冲区中写出3个字节
baos.write('a');
baos.write('b');
baos.write('c');
//返回缓冲区中的字节数组
byte[] byteArray = baos.toByteArray();
//使用数组工具类打印字节数组内容
System.out.println(Arrays.toString(byteArray));
//创建IO流对象,指定一个字节数组为数据源
ByteArrayInputStream bais = new ByteArrayInputStream(byteArray);
//读取数组中的每一个字节
int b;
while((b=bais.read())!=-1) {
System.out.println((char)b);
}
}
}
五.打印流:
专门用来输出的IO流
PrintSteam:字节打印流
PrintWriter:字符打印流
println与printf方法时支持自动刷新的,但是需要在创建字符打印流对象时,将autoflush打开
代码演示:
[java] view plaincopy
package cn.itcast;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
public class Demo3 {
public static void main(String[] args) throws IOException {
PrintWriter pw = new PrintWriter(new FileOutputStream("b.txt"),true);
pw.println(200.0);
pw.println(false);
pw.print(100.0);
pw.print(true);
pw.println("i love java");
pw.printf("我是前边的参数%d%d%.2f", 10,20,10.1);
// pw.flush();
// pw.close();
}
六.随机访问流:
RandomAccessFile
随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组,即文件是由字节组成的,随机访问流将整个文件看做一个byte数组了
存在指向该隐含数组的光标或索引,称为文件指针
该指针可以设置或者获取
设置指针:public void seek(long pos) throws IOException
获取指针:public long getFilePointer() throws IOException
构造方法:
public RandomAccessFile(File file, String mode) throws FileNotFoundException 需要配合读写模式
EOFException:相当于数组角标越界,即索引的访问异常
代码演示:
[java] view plaincopy
package cn.itcast;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
public class Demo4 {
public static void main(String[] args) throws IOException {
myWrite();
myRead();
}
public static void myWrite() throws IOException {
<strong><span style="font-family: Simsun;"><span style="font-size:14px;"></span></span></strong><pre name="code" class="java"><span style="white-space:pre"> </span>//创建随机访问流对象
[java] view plaincopy
<span style="white-space:pre"> </span>RandomAccessFile raf = new RandomAccessFile("c.txt", "rw");
System.out.println(raf.getFilePointer());
raf.writeInt(998);
System.out.println(raf.getFilePointer());
raf.writeDouble(10.1);
System.out.println(raf.getFilePointer());
raf.writeUTF("abc中");
System.out.println(raf.getFilePointer());
raf.close();
}
public static void myRead() throws IOException {
RandomAccessFile raf = new RandomAccessFile("c.txt", "rw");
System.out.println(raf.readInt());
raf.seek(8);
System.out.println(raf.readDouble());
System.out.println(raf.readUTF());
raf.close();
}
}
七.对象序列化流:
ObjectOutputStream:序列化流
ObjectInputStream:反序列化流
序列化的对象必须实现了序列化接口
Serializable
代码演示:
[java] view plaincopy
package cn.itcast;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Demo5 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
// ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d.txt"));
//
// Person p = new Person("唐嫣",26);
// oos.writeObject(p);
//
// oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d.txt"));
Object readObject = ois.readObject();
Person p2 = (Person)readObject;
System.out.println(p2.getName());
System.out.println(p2.getAge());
System.out.println(p2);
ois.close();
}
}
八.Properties:
普通的一个双列集合
Properties没有泛型,但是一般情况下,该集合中的键与值均为字符串
代码演示:
[java] view plaincopy
package cn.itcast;
import java.util.Properties;
import java.util.Set;
public class Demo6 {
public static void main(String[] args) {
//创建集合对象
Properties p = new Properties();
//创建元素对象
//将元素放到集合中
p.put("呼保义", new Person("宋江",28));
p.put("玉麒麟", new Person("卢俊义",32));
p.put("九纹龙", new Person("史进",24));
//迭代集合
Set<Object> keySet = p.keySet();
for (Object key : keySet) {
Object value = p.get(key);
System.out.println(key+":"+value);
}
}
}
Properties特有方法:
Properties一般作为属性集,里边存储的都为字符串.
public Object setProperty(String key,String value) 为某个属性赋值,即添加元素
public String getProperty(String key) 通过键获取值
public String getProperty(String key, String defaultValue)用指定的键在属性列表中搜索属性.如果没有,就返回默认值
[java] view plaincopy
package cn.itcast;
import java.util.Properties;
public class Demo7 {
public static void main(String[] args) {
Properties p = new Properties();
p.setProperty("智多星", "吴用");
p.setProperty("入云龙", "公孙胜");
p.setProperty("大刀", "关胜");
System.out.println(p.getProperty("智多星"));
System.out.println(p.getProperty("大刀"));
System.out.println(p.getProperty("豹子头"));
System.out.println(p.getProperty("霹雳火"));
System.out.println(p.getProperty("霹雳火","梁山好汉"));
}
}
Properties与IO相关的方法:
public void list(PrintStream out) 将属性列表输出到指定的输出流.通常用于调试
public void save(OutputStream out, String comments) 将属性列表输出到指定的输出流,已过时
public void store(OutputStream out, String comments) throws IOException 将属性列表输出到指定的输出流
public void load(InputStream inStream)throws IOException 从输入流中读取属性列表(键和元素对)
代码演示:
[java] view plaincopy
package cn.itcast;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
public class Demo8 {
public static void main(String[] args) throws IOException {
Properties p = new Properties();
p.setProperty("是否隐身", "在线");
p.setProperty("在线状态", "忙碌");
p.setProperty("是否记住密码", "否");
// PrintWriter pw = new PrintWriter("e.txt");
// p.list(pw);
// pw.close();
// FileOutputStream fos = new FileOutputStream("e.txt");
// p.store(fos, "hello");
// fos.close();
// FileWriter fw = new FileWriter("e.properties");
// p.store(fw, "hello");
// fw.close();
Properties p2 = new Properties();
FileReader fr = new FileReader("e.properties");
p2.load(fr);
fr.close();
System.out.println(p);
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
IO流:
笔记内容:转换流,字节输入输出流,数据输入输出流,内存操作流,随机访问流
打印流,对象序列化流,Properties
一.转换流
转换流:实际就是字符流
OutputStreamWriter:输出转换流
构造方法:
传入一个相应的字节流,返回一个相应的字符流,而这个字符流就是转换流对象
注意:
在使用过程中:将字节流对象转成字符流对象
在本质上:字符流通向字节流的桥梁
InputStreamReader:输入转换流
构造方法:
传入一个相应的字节流,返回一个相应的字符流,而这个字符流就是转换流对象
注意:
在使用过程中:将字节流对象转成字符流对象
在本质上:字节流通向字符流的桥梁
代码演示:
[java] view plaincopy
package cn.itcast2;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
public class Demo5 {
public static void main(String[] args) throws IOException {
method();
}
//转换流作为字符流完成文件复制
public static void method() throws IOException {
InputStream is = new FileInputStream("g.txt");
InputStreamReader isr = new InputStreamReader(is);
OutputStream os = new FileOutputStream("h.txt");
OutputStreamWriter osw = new OutputStreamWriter(os);
int c;
while((c=isr.read())!=-1) {
osw.write(c);
}
osw.close();
isr.close();
}
}
二.字节输入输出流
System.in:字节输入流;从控制台读入;名为标准输入流
System.out:字节输出流;输出到控制台;名为标准输出流
代码演示:
[java] view plaincopy
package cn.itcast2;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
/*
* 从控制台读取,再写到控制台中去
*/
public class Demo7 {
public static void main(String[] args) throws IOException {
//创建字节流对象
InputStream is = System.in;
OutputStream os = System.out;
//创建字符流对象
InputStreamReader isr = new InputStreamReader(is);
OutputStreamWriter osr = new OutputStreamWriter(os);
//创建高效字符流对象
BufferedReader br = new BufferedReader(isr);
BufferedWriter bw = new BufferedWriter(osr);
//读
String line;
while((line=br.readLine())!=null) {
//定义停止输入的标记字符串
if("byebye".equals(line)) {
break;
}
//写
bw.write(line);
bw.newLine();
bw.flush();
}
//关闭流
osr.close();
isr.close();
}
}
三.数据输入输出流:
DataOutputStream:数据输出流
public final void writeXxx(xx x) throws IOException 写出XXX类型的数据
DataInputStream:数据输入流
public final byte readXxx(xx x) throws IOException 读入Xxx类型的数据
按照相同的顺序读写
代码演示:
[java] view plaincopy
package cn.itcast;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws IOException {
// FileWriter fw = new FileWriter("a.txt");
// fw.write("10");
// fw.close();
int a = 983;
[java] view plaincopy
<span style="white-space:pre"> </span>//创建数据输出流对象
[java] view plaincopy
DataOutputStream dos = new DataOutputStream(new FileOutputStream("a.txt"));
dos.writeInt(a);
dos.writeBoolean(true);
dos.writeChar('a');
dos.writeDouble(365);
dos.writeUTF("i love java 中国");
dos.close();
//创建数据输入流对象
DataInputStream dis = new DataInputStream(new FileInputStream("a.txt"));
System.out.println(dis.readInt());
System.out.println(dis.readBoolean());
System.out.println(dis.readChar());
System.out.println(dis.readDouble());
System.out.println(dis.readUTF());
dis.close();
}
}
四.内存操作流:
不需要调用底层资源的IO流
ByteArrayOutputStream:字节数组输出流 即将数据写到数组中
ByteArrayInputStream:字节数组输入流 即从数组中读取
CharArray 与 String 是相同的思路
代码演示:
[java] view plaincopy
package cn.itcast;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Arrays;
public class Demo2 {
public static void main(String[] args) {
/*
* CharArrayReader:从数组中读去字符
* CharArrayWriter:将字符写到数组中
* StringWriter:将字符写到字符串中
* StringReader:从字符串中读取数据
*/
//创建IO流对象
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//向缓冲区中写出3个字节
baos.write('a');
baos.write('b');
baos.write('c');
//返回缓冲区中的字节数组
byte[] byteArray = baos.toByteArray();
//使用数组工具类打印字节数组内容
System.out.println(Arrays.toString(byteArray));
//创建IO流对象,指定一个字节数组为数据源
ByteArrayInputStream bais = new ByteArrayInputStream(byteArray);
//读取数组中的每一个字节
int b;
while((b=bais.read())!=-1) {
System.out.println((char)b);
}
}
}
五.打印流:
专门用来输出的IO流
PrintSteam:字节打印流
PrintWriter:字符打印流
println与printf方法时支持自动刷新的,但是需要在创建字符打印流对象时,将autoflush打开
代码演示:
[java] view plaincopy
package cn.itcast;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
public class Demo3 {
public static void main(String[] args) throws IOException {
PrintWriter pw = new PrintWriter(new FileOutputStream("b.txt"),true);
pw.println(200.0);
pw.println(false);
pw.print(100.0);
pw.print(true);
pw.println("i love java");
pw.printf("我是前边的参数%d%d%.2f", 10,20,10.1);
// pw.flush();
// pw.close();
}
六.随机访问流:
RandomAccessFile
随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组,即文件是由字节组成的,随机访问流将整个文件看做一个byte数组了
存在指向该隐含数组的光标或索引,称为文件指针
该指针可以设置或者获取
设置指针:public void seek(long pos) throws IOException
获取指针:public long getFilePointer() throws IOException
构造方法:
public RandomAccessFile(File file, String mode) throws FileNotFoundException 需要配合读写模式
EOFException:相当于数组角标越界,即索引的访问异常
代码演示:
[java] view plaincopy
package cn.itcast;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
public class Demo4 {
public static void main(String[] args) throws IOException {
myWrite();
myRead();
}
public static void myWrite() throws IOException {
<strong><span style="font-family: Simsun;"><span style="font-size:14px;"></span></span></strong><pre name="code" class="java"><span style="white-space:pre"> </span>//创建随机访问流对象
[java] view plaincopy
<span style="white-space:pre"> </span>RandomAccessFile raf = new RandomAccessFile("c.txt", "rw");
System.out.println(raf.getFilePointer());
raf.writeInt(998);
System.out.println(raf.getFilePointer());
raf.writeDouble(10.1);
System.out.println(raf.getFilePointer());
raf.writeUTF("abc中");
System.out.println(raf.getFilePointer());
raf.close();
}
public static void myRead() throws IOException {
RandomAccessFile raf = new RandomAccessFile("c.txt", "rw");
System.out.println(raf.readInt());
raf.seek(8);
System.out.println(raf.readDouble());
System.out.println(raf.readUTF());
raf.close();
}
}
七.对象序列化流:
ObjectOutputStream:序列化流
ObjectInputStream:反序列化流
序列化的对象必须实现了序列化接口
Serializable
代码演示:
[java] view plaincopy
package cn.itcast;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Demo5 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
// ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d.txt"));
//
// Person p = new Person("唐嫣",26);
// oos.writeObject(p);
//
// oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d.txt"));
Object readObject = ois.readObject();
Person p2 = (Person)readObject;
System.out.println(p2.getName());
System.out.println(p2.getAge());
System.out.println(p2);
ois.close();
}
}
八.Properties:
普通的一个双列集合
Properties没有泛型,但是一般情况下,该集合中的键与值均为字符串
代码演示:
[java] view plaincopy
package cn.itcast;
import java.util.Properties;
import java.util.Set;
public class Demo6 {
public static void main(String[] args) {
//创建集合对象
Properties p = new Properties();
//创建元素对象
//将元素放到集合中
p.put("呼保义", new Person("宋江",28));
p.put("玉麒麟", new Person("卢俊义",32));
p.put("九纹龙", new Person("史进",24));
//迭代集合
Set<Object> keySet = p.keySet();
for (Object key : keySet) {
Object value = p.get(key);
System.out.println(key+":"+value);
}
}
}
Properties特有方法:
Properties一般作为属性集,里边存储的都为字符串.
public Object setProperty(String key,String value) 为某个属性赋值,即添加元素
public String getProperty(String key) 通过键获取值
public String getProperty(String key, String defaultValue)用指定的键在属性列表中搜索属性.如果没有,就返回默认值
[java] view plaincopy
package cn.itcast;
import java.util.Properties;
public class Demo7 {
public static void main(String[] args) {
Properties p = new Properties();
p.setProperty("智多星", "吴用");
p.setProperty("入云龙", "公孙胜");
p.setProperty("大刀", "关胜");
System.out.println(p.getProperty("智多星"));
System.out.println(p.getProperty("大刀"));
System.out.println(p.getProperty("豹子头"));
System.out.println(p.getProperty("霹雳火"));
System.out.println(p.getProperty("霹雳火","梁山好汉"));
}
}
Properties与IO相关的方法:
public void list(PrintStream out) 将属性列表输出到指定的输出流.通常用于调试
public void save(OutputStream out, String comments) 将属性列表输出到指定的输出流,已过时
public void store(OutputStream out, String comments) throws IOException 将属性列表输出到指定的输出流
public void load(InputStream inStream)throws IOException 从输入流中读取属性列表(键和元素对)
代码演示:
[java] view plaincopy
package cn.itcast;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
public class Demo8 {
public static void main(String[] args) throws IOException {
Properties p = new Properties();
p.setProperty("是否隐身", "在线");
p.setProperty("在线状态", "忙碌");
p.setProperty("是否记住密码", "否");
// PrintWriter pw = new PrintWriter("e.txt");
// p.list(pw);
// pw.close();
// FileOutputStream fos = new FileOutputStream("e.txt");
// p.store(fos, "hello");
// fos.close();
// FileWriter fw = new FileWriter("e.properties");
// p.store(fw, "hello");
// fw.close();
Properties p2 = new Properties();
FileReader fr = new FileReader("e.properties");
p2.load(fr);
fr.close();
System.out.println(p);
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。