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) ; // 输出内容
}
}
}
};