JavaIO其他实例浅析

1.DataOutputStream/DataInputStream流

数据输出流(DataOutputStream)

数据输入流(DataInputStream)

这两个数据操作流与平台无关,存在与IO

DataOutputStream继承OutputStream,定义:

Public class DataOutputStream extendsFilterOutputStream implements DataOutput

DataOutput接口定义了一系列writeXxx()操作。

public class Main11 {
	public static void main(String[] args){
		try {
			DataOutputStream dos = new DataOutputStream(new FileOutputStream(new File("src//JavaIO//test02.txt")));
			String names[] = {"aaa","bbb","ccc"};
			int age[] ={1,2,3};
			int weight[] = {2,2,2};
			for(int i=0 ;i<names.length;i++){
				dos.writeChars(names[i]);
				dos.writeChar('\t');
				dos.writeInt(age[i]);
				dos.writeChar('\t');
				dos.writeInt(weight[i]);
				dos.writeChar('\n');
			}
			dos.close();
			
			DataInputStream dis = new DataInputStream(new FileInputStream(new File("src//JavaIO//test02.txt")));
			String na = null;
			int ag = 0;
			int we = 0;
			char temp[] = null;
			int len = 0;
			char c = 0;
			while(dis.available()!=0){
				temp = new char[200];
				len = 0;
				while((c=dis.readChar())!='\t'){
					temp[len] = c;
					len++;
				}
				na = new String(temp,0,len);
				ag = dis.readInt();
				dis.readChar();
				we = dis.readInt();
				dis.readChar();
				System.out.printf("%s\t%d\t%d\n", na,ag,we);
			}
			dis.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			
			e.printStackTrace();
		}
		
	
	}
}

2、数据合并流

public class Main13 {

	public static void main(String[] args) {
		try {
			InputStream input1 = new FileInputStream(new File("src//JavaIO//test.txt"));
			InputStream input2 = new FileInputStream(new File("src//JavaIO//err.log"));
			OutputStream out = new FileOutputStream(new File("src//JavaIO//12.txt"));
			SequenceInputStream sis = new SequenceInputStream(input1,input2);
			int temp = 0;
			while((temp=sis.read())!=-1){
				out.write(temp);
			}
			input1.close();
			input2.close();
			out.close();
			sis.close();
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

3、压缩流

压缩文件:

public class Main14 {
	public static void main(String[] args) throws IOException{
		File file = new File("src//JavaIO//test02.txt");
		File zipFile = new File("src//JavaIO//test03.zip");
		InputStream input = new FileInputStream(file);
		ZipOutputStream zipOut = null;
		zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
		zipOut.putNextEntry(new ZipEntry(file.getName()));
		zipOut.setComment("www.baidu.com");
		int temp = 0;
		while((temp=input.read())!=-1){
			zipOut.write(temp);
		}
		input.close();
		zipOut.close();
	}
}

压缩文件夹:

public class Main15 {
	public static void main(String args[]) throws IOException{
		File file = new File("d:" + File.separator + "aaa") ;	// 定义要压缩的文件夹
		File zipFile = new File("d:" + File.separator + "aaa.zip") ;	// 定义压缩文件名称
		InputStream input = null ;	// 定义文件输入流
		ZipOutputStream zipOut = null ;	// 声明压缩流对象
		zipOut = new ZipOutputStream(new FileOutputStream(zipFile)) ;
		zipOut.setComment("www.baidu.com") ;	// 设置注释
		int temp = 0 ;
		if(file.isDirectory()){	// 判断是否是文件夹
			File lists[] = file.listFiles() ;	// 列出全部文件
			for(int i=0;i<lists.length;i++){
				input = new FileInputStream(lists[i]) ;	// 定义文件的输入流
				zipOut.putNextEntry(new ZipEntry(file.getName()
					+File.separator+lists[i].getName())) ;	// 设置ZipEntry对象
				while((temp=input.read())!=-1){	// 读取内容
					zipOut.write(temp) ;	// 压缩输出
				}
				input.close() ;	// 关闭输入流
			}
		}
		zipOut.close() ;	// 关闭输出流
	}
}


zipFile

public class Main16{
	public static void main(String args[]) throws Exception{	// 所有异常抛出
		File file = new File("d:" + File.separator + "aaa.zip") ;	// 找到压缩文件
		ZipFile zipFile = new ZipFile(file) ;	// 实例化ZipFile对象
		System.out.println("压缩文件的名称:" + zipFile.getName()) ;	// 得到压缩文件的名称
	}
};
zipFile解压
public class Main17{
	public static void main(String args[]) throws Exception{	// 所有异常抛出
		File file = new File("d:" + File.separator + "aaa.zip") ;	// 找到压缩文件
		File outputFile = new File("d:" + File.separator + "aaazip.txt") ; // 定义解压缩的文件名称
		ZipFile zipFile = new ZipFile(file) ;	// 实例化ZipFile对象
		ZipEntry entry = zipFile.getEntry("aaa.txt") ;	// 得到一个压缩实体
		OutputStream out = new FileOutputStream(outputFile) ; // 实例化输出流
		InputStream input = zipFile.getInputStream(entry) ;	// 得到一个压缩实体的输入流
		int temp = 0 ;
		while((temp=input.read())!=-1){
			out.write(temp) ;
		}
		input.close() ;	// 关闭输入流
		out.close() ;	// 关闭输出流
	}
};

ZipInputStream可以不用输入实体名称,就可以得到每一个zip对象

public class Main18{
 public static void main(String args[]) throws Exception{ // 所有异常抛出
  File zipFile = new File("d:" + File.separator + "aaa.zip") ; // 定义压缩文件名称
  ZipInputStream input = null ; // 定义压缩输入流
  input = new ZipInputStream(new FileInputStream(zipFile)) ; // 实例化ZIpInputStream
  ZipEntry entry = input.getNextEntry() ; // 得到一个压缩实体
  System.out.println("压缩实体名称:" + entry.getName()) ;
  input.close() ;
 }
};

利用此特性并结合ZipFile可以完成解压缩文件夹的功能。ZipFile对象,可以找到每一个ZipEntry的输入流,但是ZipInputStream并不能得到每一个输入流,所以需要使用ZipFile,但是ZipInputStream在取得每一个ZipEntry时,不需要每一个ZipEntry的名称。

public class Main18{
	public static void main(String args[]) throws Exception{	// 所有异常抛出
		File file = new File("d:" + File.separator + "aaadir.zip") ;	// 定义压缩文件名称
		File outFile = null ;	// 输出文件的时候要有文件夹的操作
		ZipFile zipFile = new ZipFile(file) ;	// 实例化ZipFile对象
		ZipInputStream zipInput = null ;	// 定义压缩输入流
		OutputStream out = null ;	// 定义输出流,用于输出每一个实体内容
		InputStream input = null ;	// 定义输入流,读取每一个ZipEntry
		ZipEntry entry = null ;	// 每一个压缩实体
		zipInput = new ZipInputStream(new FileInputStream(file)) ;	// 实例化ZIpInputStream
		while((entry = zipInput.getNextEntry())!=null){	// 得到一个压缩实体
			System.out.println("解压缩" + entry.getName() + "文件。") ;
			outFile = new File("d:" + File.separator + entry.getName()) ;	// 定义输出的文件路径
			if(!outFile.getParentFile().exists()){	// 如果输出文件夹不存在
				outFile.getParentFile().mkdir() ;	// 创建文件夹
			}
			if(!outFile.exists()){	// 判断输出文件是否存在
				outFile.createNewFile() ;	// 创建文件
			}
			input = zipFile.getInputStream(entry) ;	// 得到每一个实体的输入流
			out = new FileOutputStream(outFile) ;	// 实例化文件输出流
			int temp = 0 ;
			while((temp=input.read())!=-1){
				out.write(temp) ;
			}
			input.close() ;		// 关闭输入流
			out.close() ;	// 关闭输出流
		}
		input.close() ;
	}
};

压缩文件中的每一个压缩实体都使用ZipEntry保存,一个压缩文件中可能包含一个或多个ZipEntry对象。

在java中可以使用zip,jar, gz三种格式的亚索支持,操作流程一样。

ZipFile表示每一个压缩文件,可以得到每一个压缩实体的输入流。

ZipInputStream可以得到每一个实体,但是却无法得到每一个实体的输入流。


回退流

import java.io.ByteArrayInputStream ;
import java.io.PushbackInputStream ;
public class Main19{
	public static void main(String args[]) throws Exception {	// 所有异常抛出
		String str = "www.baidul.com" ;		// 定义字符串
		PushbackInputStream push = null ;		// 定义回退流对象
		ByteArrayInputStream bai = null ;		// 定义内存输入流
		bai = new ByteArrayInputStream(str.getBytes()) ;	// 实例化内存输入流
		push = new PushbackInputStream(bai) ;	// 从内存中读取数据
		System.out.print("读取之后的数据为:") ;
		int temp = 0 ; 
		while((temp=push.read())!=-1){	// 读取内容
			if(temp=='.'){	// 判断是否读取到了“.”
				push.unread(temp) ;	// 放回到缓冲区之中
				temp = push.read() ;	// 再读一遍
				System.out.print("(退回"+(char)temp+")") ;
			}else{
				System.out.print((char)temp) ;	// 输出内容
			}
		}
	}
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_evenif

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值