黑马程序员——IO流



------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

兴趣是学习编程最好的老师

不积跬步,无以至千里

这辈子没办法做太多事情,所以每一件都要做到精彩绝伦。


<序列流>

1.序列流可以把多个字节输入流整合成一个,从序列流中读取数据时,将从被整合的第一个流开始读,读完一个之后继续读第二个, 以此类推.
  整合两个: SequenceInputStream(InputStream, InputStream)
  整合多个: SequenceInputStream(Enumeration)

例如:

整合两个:

SequenceInputStream sis = new SequenceInputStream(new FileInputStream("aaa.txt"));

整合多个:

                FileInputStream fis1 = new FileInputStream("a.txt");			
		FileInputStream fis2 = new FileInputStream("b.txt");

		FileInputStream fis3 = new FileInputStream("c.txt");			
		Vector<FileInputStream> v = new Vector<>();			
		v.add(fis1);															v.add(fis2);
		v.add(fis3);
		
		Enumeration<FileInputStream> en = v.elements();					//获取流对象
		SequenceInputStream sis = new SequenceInputStream(en);			//传递给SequenceInputStream的构造函数
		FileOutputStream fos = new FileOutputStream("d.txt");			
		
		int b;
		while((b = sis.read()) != -1) {
			fos.write(b);
		}
		
		sis.close();
		fos.close();
	}

<内存输出流>

1.内存输出输出流可以向内存中写数据, 把内存当作一个缓冲区, 写出之后可以一次性获取出所有数据
2.使用方式
  创建对象: new ByteArrayOutputStream()
  写出数据: write(int), write(byte[])
  获取数据: toByteArray()

class Demo{
public static void main(String[] args){
FileInputStream fis = new FileInputStream("aaa.txt");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int b;
while((b = fis.read())=!1){
bos.write(b);
}

fis.close();}
}

<对象操作流>

1.对象操作流可以将一个对象写出, 或者读取一个对象到程序中,也就是执行了序列化和反序列化的操作。 要写出的对象必须实现Serializable接口才能被序列化
 2.使用方式  要写出的对象必须实现Serializable接口才能被序列化
  写出: new ObjectOutputStream(OutputStream), writeObject()
  读取: new ObjectInputStream(InputStream), readObject()

public static void main(String[] args) throws IOException {
			
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("c.txt"));	//创建输出流对象
		Person p1 = new Person("张三", 23);												
		Person p2 = new Person("李四", 24);
		
		ArrayList<Person> list = new ArrayList<>();										//                                                                               //创建集合对象
		list.add(p1);																	                                                      //将人添加到集合中
		list.add(p2);
		oos.writeObject(list);															                                                              //写出集合对象
		
		oos.close();															}

public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
			
		ObjectInputStream ois = new ObjectInputStream(new FileInputStream("c.txt"));
		List<Person> list = (List<Person>) ois.readObject();							//读取对象
		for (Person person : list) {													                                                        //遍历集合
			System.out.println(person);
		}
		
		ois.close();																}

<打印流>

 1.是打印流可以很方便的将对象的toString()结果输出, 并且自动加上换行, 而且可以使用自动刷出的模式
       System.out就是一个PrintStream, 其默认向控制台输出信息
 2.使用方式
      打印: print(), println()
      自动刷出: PrintWriter(OutputStream out, boolean autoFlush, String encoding)

PrintStream ps = new PrintStream("e.txt");
		ps.println(97);								//将97转换成字符串写出
		ps.write(97);								//直接将97写出
		ps.close();

<标准输入输出流>


1.标准输入输出流
      System.in是InputStream, 标准输入流, 默认可以从键盘输入读取字节数据
      System.out是PrintStream, 标准输出流, 默认可以向Console中输出字符和字节数据
 2.修改标准输入输出流
      修改输入流: System.setIn(InputStream)
      修改输出流: System.setOut(PrintStream)

class Demo{
public static void main(String[] agrs){
System.setIn(new FileInputStream("aaa.txt"));
System.setOut(new PrintStream("bbb.txt"));
InputStream is = System.in;
PrintStream ps = System.out;
int b;
while((b=is.read()!=-1)){
ps.println(b);}
is.close();
ps.close();
}
}

<数据输入输出流>

1.数据输入输出流
  DataInputStream, DataOutputStream可以按照基本数据类型大小读写数据
 2.使用方式
  DataInputStream(InputStream),            readInt(),                  readLong()
  DataOutputStream(OutputStream),          writeInt(),                 writeLong()


<Properties>


 1.向内存中存入值,并通过键获取值setProperty(key,value) getProperty(key);
 2.通过load方法,读取配置文件,propertyNames获取所有的key,返回Enumeration
 3.根据键改值,并重新存入到配置文件setProperty(key,value),list(new PrintStream()),System.getProperties();获取系统属性,propertyNames将所有的键返回到枚举里,就可以迭代了



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值