12_IO(其他常用类)(上)


打印流:
该流提供了打印方法,可以将各种数据类型的数据都原样打印。

字节打印流
PrintStream
构造函数可以接受的参数类型
1.file对象,File
2.字符串路径:String
3.字节输出流。OutPutStream

字符打印流:
PrintWriter
1.file对象,File
2.字符串路径:String
3.字节输出流。OutPutStream
4.字符输出流,Writer
字节打印流实例:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class PrintStreamDemo {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
//		把信息输出到控制台
//		PrintWriter out=new PrintWriter(System.out,true);
		//把信息输出到文件中
		PrintWriter out=new PrintWriter(new BufferedOutputStream( new FileOutputStream("D:\\b\\tru.txt")),true);
		
		String line=null;
		while((line=bufr.readLine())!=null)
		{
			if("over".equals(line))
				break;
			out.println(line);
		}
		bufr.close();
		out.close();
	}

}
properties类:
properties是hashTable的子类
也就是说它具备map集合的特点。而且它里面存储的键值对都是字符串。


是集合中和IO技术相集合的集合容器
该对象的特点:可以用于键值对行驶的配置文件
那么在加载数据时,需要数据有固定的格式  键=值


import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
import java.util.Set;

public class PropertiesDemo {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		loadDemo();
		
	}
	public  static void loadDemo() throws IOException{
		FileInputStream fis=new FileInputStream("E:\\my.ini");
		
		Properties prop=new Properties();
		prop.load(fis);
//		System.out.println(prop);
		//将数据加载到流中
		prop.list(System.out);
		
		prop.setProperty("port", "22222");
		
		
		FileOutputStream fos=new FileOutputStream("E:\\my.ini");
		prop.store(fos,"dfsklfj");
		fis.close();
	}
	
	public static void method_1() throws IOException{
		
		//演示:如何将流中的数据存储到集合集合中
				//想要将my.ini中的键值对存储到集合中
				
				/*1.用流和my.ini文件关联
				2.读取一行数据,将该行数据用"="进行切割
				3.等号左边作为键,右边作为值,存入到Properties集合中即可
				*/
		BufferedReader bufr=new BufferedReader(new FileReader("E:\\my.ini"));
		
		String line=null;
		Properties prop=new Properties();
		while((line=bufr.readLine())!=null)
		{
				String strs[]=line.split("=");
				prop.setProperty(strs[0], strs[1]);
				System.out.println(strs[0]+"="+strs[1]);
		}
		
		bufr.close();
	}
	
	
private static BufferedReader BufferedReader(FileReader fileReader) {
		// TODO Auto-generated method stub
		return null;
	}


	//设置和获取元素
	public  static void setAndGet(){
		Properties prop=new Properties();
		prop.setProperty("zhangsan", "21");
		prop.setProperty("lis", "39");
		
//		System.out.println(prop);
//		String str=prop.getProperty("zhangsan");
//		System.out.println(str);
		
		Set<String> names=prop.stringPropertyNames();
		for(String s:names)
		{
			System.out.println(s+"..."+prop.getProperty(s));
			
		}
		
	}
	
	
}

序列流:  SequenceInputStream
把多个流对象合并成一个 流对象。
它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.Vector;

public class SequenceDemo {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		//创建一个集合对象,里面的放的对象是FileInputStream
		Vector<FileInputStream> v=new Vector<FileInputStream>();
		
		//向集合中添加元素
		v.add(new FileInputStream("E:\\1.txt"));
		v.add(new FileInputStream("E:\\3.txt"));
		v.add(new FileInputStream("E:\\2.txt"));
		
		//获取此集合的枚举类型
		Enumeration<FileInputStream> enu=v.elements();
		
		//创建一个带有Enumeration参数的序列流
		SequenceInputStream sis=new SequenceInputStream(enu);
		
		//带有缓冲区的字节输出流
		BufferedOutputStream bufo=new BufferedOutputStream(new FileOutputStream("E:\\4.txt"));
		
		byte b[]=new byte[1024];
		int len=0;
		while((len=sis.read(b))!=-1)
		{
			bufo.write(b, 0, len);
			bufo.flush();
		}
		sis.close();
		bufo.close();
	}

}

运用学过的IO流类:
把一个大文件切割成若干小文件,然后再合并成一个大文件
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;

import javax.sound.midi.Sequence;

public class SplitFile {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
//		split();
		merge();
	}
	//分割文件,分割成1M大小的块
	public static void split() throws IOException{
		//创建输入流对象
		FileInputStream fis=new FileInputStream("D:\\a\\123456.mp3");
		
		FileOutputStream fos=null;
		
		byte[] buf=new byte[1024*1024];
		int len=0;
		int count=0;
		while((len=fis.read(buf))!=-1)
		{
			fos=new FileOutputStream("D:\\a\\"+(count++)+".part");
			fos.write(buf, 0, len);
			fos.close();
		}
		fis.close();
	}

	//把分割的文件合并
	public static void merge() throws IOException{
		ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();
		for(int i=1;i<8;i++){
			al.add(new FileInputStream("D:\\a\\"+i+".part"));
		}
		
		final Iterator<FileInputStream> it=al.iterator();
		Enumeration<FileInputStream> enu=new Enumeration<FileInputStream>() {

			@Override
			public boolean hasMoreElements() {
				// TODO Auto-generated method stub
				return it.hasNext();
			}

			@Override
			public FileInputStream nextElement() {
				// TODO Auto-generated method stub
				return it.next();
			}
		};
		
		SequenceInputStream sis=new SequenceInputStream(enu);
		
		BufferedOutputStream bufo=new BufferedOutputStream(new FileOutputStream("D:\\paret.mp3"));
		
		byte [] buf=new byte[1024*1014];
		int len;
		while((len=sis.read(buf))!=-1)
		{
			bufo.write(buf, 0, len);
			bufo.flush();
		}
		bufo.close();
		sis.close();
		
	
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值