文件读写——JAVA

目录

一、普通文件

读文件:

写文件:

二、二进制文件

读文件:

写文件:

三、压缩文件

压缩文件:

压缩文件夹:

解压缩文件:

解压缩文件夹:

四、代码举例

普通文件

二进制文件

压缩文件


 先看两张图:转载自://blog.csdn.net/m0_37721946/article/details/103538660

一、普通文件

读文件:

FileInputStream fis= new FileInputStream(路径);//节点类

InputStreamReader isr= new InputStreamReader(fis);//转化类

BufferedReader br =new BufferedReader(isr);//装饰类

br.readLine();

写文件:

FileOutputStream fos= new FileOutputStream(路径);//节点类

OutputStreamWriter osr= new OutputStreamWriter(fos);//转化类

BufferedWriter bw =new BufferedWriter(osr);//装饰类

bw.write(内容);写入内容

bw.newLine();//新的一行

二、二进制文件

读文件:

FileInputStream fis= new FileInputStream(路径);

BufferedInputStream bis= new BufferedInputStream(fis);

DataInputStream dis=new DataInputStream(bis);

dis.readUTF()

dis.readInt()

写文件:

FileOutputStream fos= new FileOutputStream(路径);

BufferedOutputStream bos= new BufferedOutputStream(fos);

DataOutputStream dos=new DataOutputStream(bos);

dos.writeUTF("a");

dos.writeInt(20);

三、压缩文件

压缩文件:

File file =new File(路径);

File zipFile =new File(路径.zip);

InputStream input = new FileInputStream(file);

FileOutputStream fos =new FileOutputStream(zipFile);

ZipOutputStream zos=new ZipOutputStream(fos);

zos.putNextEntry(new ZipEntry(file.getName())) ; 

内容=input.read();

zos.write(内容);

压缩文件夹:

File file =new File(路径);

File zipFile =new File(路径.zip);

FileOutputStream fos =new FileOutputStream(zipFile);

ZipOutputStream zos=new ZipOutputStream(fos);

判断file是否是文件夹,是则File lists[] = file.listFiles() ;找出文件夹下所有文件路径

然后进行遍历:

InputStream input = new FileInputStream(lists[i]);

zos.putNextEntry(new ZipEntry(file.getName()
                    +File.separator+lists[i].getName())) ; 

内容=input.read();

zos.write(内容);

补充:此处只实现文件夹一层压缩,若需多层压缩则结合压缩文件和压缩文件夹进行递归

解压缩文件:

File zipFile =new File(路径.zip);

FileInputStream fis =new FileInputStream(zipFile);

ZipInputStream zis=new ZipInputStream(fis);

遍历:判断ZipEntry entry =zis.getNextEntry();

{File file =new File(zipFile的上层目录+entry.getName())

判断压缩文件的文件夹是否已经被创建,若未创建,则创建文件夹

OutputStream output = new FileOutputStream(file);

InputStream is =zipFile.getInputStream(entry);

内容=is.read();

output.write(内容);

}

解压缩文件夹:

File zipFile =new File(路径.zip);

FileInputStream fis =new FileInputStream(zipFile);

ZipinputStream zis=new ZipinputStream(fis);

判断file是否是文件夹,是则File lists[] = file.listFiles() ;找出文件夹下所有文件路径

然后进行遍历:

InputStream input = new FileInputStream(lists[i]);

zos.putNextEntry(new ZipEntry(file.getName()
                    +File.separator+lists[i].getName())) ; 

内容=input.read();

zos.write(内容);

补充:此处只实现文件夹一层解压缩,若需多层解压缩则结合解压缩文件和解压缩文件夹进行递归

四、代码举例

一、普通文件

读文件:

FileInputStream fis= new FileInputStream(路径);//节点类

InputStreamReader isr= new InputStreamReader(fis);//转化类

BufferedReader br =new BufferedReader(isr);//装饰类

br.readLine();

public static void readFile1() {
		FileInputStream fis = null;
		InputStreamReader isr = null;
		BufferedReader br = null;
		try {
			fis = new FileInputStream("c:/temp/abc.txt"); // 节点类
			isr = new InputStreamReader(fis, "UTF-8"); // 转化类
			//isr = new InputStreamReader(fis);
			br = new BufferedReader(isr); // 装饰类
			// br = new BufferedReader(new InputStreamReader(new
			// FileInputStream("c:/temp/abc.txt")))
			String line;
			while ((line = br.readLine()) != null) // 每次读取一行
			{
				System.out.println(line);
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			try {
				br.close(); // 关闭最后一个类,会将所有的底层流都关闭
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		}
	}
public static void readFile2() {
		String line;
		//try-resource 语句,自动关闭资源
		try (BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("c:/temp/abc.txt")))) {
			while ((line = in.readLine()) != null) {
				System.out.println(line);
			}
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}

写文件:

FileOutputStream fos= new FileOutputStream(路径);//节点类

OutputStreamWriter osr= new OutputStreamWriter(fos);//转化类

BufferedWriter bw =new BufferedWriter(osr);//装饰类

bw.writer(内容);写入内容

bw.newLine();//新的一行

public static void writeFile1() {
		FileOutputStream fos = null;
		OutputStreamWriter osw = null;
		BufferedWriter bw = null;
		try {
			fos = new FileOutputStream("c:/temp/abc.txt"); // 节点类
			osw = new OutputStreamWriter(fos, "UTF-8"); // 转化类
			//osw = new OutputStreamWriter(fos); // 转化类
			bw = new BufferedWriter(osw); // 装饰类
			// br = new BufferedWriter(new OutputStreamWriter(new
			// FileOutputStream("c:/temp/abc.txt")))
			bw.write("我们是");
			bw.newLine();
			bw.write("Ecnuers.^^");
			bw.newLine();
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			try {
				bw.close(); // 关闭最后一个类,会将所有的底层流都关闭
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		}
	}

	public static void writeFile2() {
		//try-resource 语句,自动关闭资源
		try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("c:/temp/abc.txt")))) {
			bw.write("我们是");
			bw.newLine();
			bw.write("Ecnuers.^^");
			bw.newLine();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

二进制文件

读文件:

FileInputStream fis= new FileInputStream(路径);

BufferedInputStream bis= new BufferedInputStream(fis);

DataInputStream dis=new DataInputStream(bis);

dis.readUTF()

dis.readInt()

//try-resource 语句,自动关闭资源
		try (DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream("c:/temp/def.dat")))) {
			String a, b;
		    int c, d;
		    a=dis.readUTF();
		    c=dis.readInt();
		    d=dis.readInt();
		    b=dis.readUTF();
		    System.out.println("a: "+a);
		    System.out.println("c: "+c);
		    System.out.println("d: "+d);
		    System.out.println("b: "+b);
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}

写文件:

FileOutputStream fos= new FileOutputStream(路径);

BufferedOutputStream bos= new BufferedOutputStream(fos);

DataOutputStream dos=new DataOutputStream(bos);

dos.writeUTF("a");

dos.writeInt(20);

 FileOutputStream fos = null;
	  DataOutputStream dos = null;
	  BufferedOutputStream bos = null;
		try {
			fos = new FileOutputStream("c:/temp/def.dat"); // 节点类  写字节
			bos = new BufferedOutputStream(fos); // 装饰类      写字节数据到缓冲区
			dos = new DataOutputStream(bos); // 转化类	负责数据类到字节的转换	
			
			dos.writeUTF("a");
			dos.writeInt(20);
			dos.writeInt(180);
			dos.writeUTF("b");
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			try {
				dos.close(); // 关闭最后一个类,会将所有的底层流都关闭
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		}

压缩文件

压缩文件:

File file =new File(路径);

File zipFile =new File(路径.zip);

InputStream input = new FileInputStream(file);

FileOutputStream fos =new FileOutputStream(zipFile);

ZipOutputStream zos=new ZipOutputStream(fos);

zos.putNextEntry(new ZipEntry(file.getName())) ; 

内容=input.read();

zos.write(内容);


import java.io.File ;  
import java.io.FileInputStream ;  
import java.io.InputStream ;  
import java.util.zip.ZipEntry ;  
import java.util.zip.ZipOutputStream ;  
import java.io.FileOutputStream ;  
public class SingleFileZip{  
    public static void main(String args[]) throws Exception{    
        File file = new File("c:/temp/abc.txt") ;  // 定义要压缩的文件  
        File zipFile = new File("c:/temp/single2.zip") ;   // 定义压缩文件名称  
        
        InputStream input = new FileInputStream(file) ; // 定义文件的输入流  
        ZipOutputStream zipOut = null ; // 声明压缩流对象  
        zipOut = new ZipOutputStream(new FileOutputStream(zipFile)) ;  
        zipOut.putNextEntry(new ZipEntry(file.getName())) ; // 设置ZipEntry对象  
        zipOut.setComment("single file zip") ;  // 设置注释  
        
        //压缩过程
        int temp = 0 ;  
        while((temp=input.read())!=-1){ // 读取内容  
            zipOut.write(temp) ;    // 压缩输出  
        }  
        input.close() ; // 关闭输入流  
        zipOut.close() ;    // 关闭输出流  
        
        System.out.println("single file zip done.");
    }  
}

压缩文件夹:

File file =new File(路径);

File zipFile =new File(路径.zip);

FileOutputStream fos =new FileOutputStream(zipFile);

ZipOutputStream zos=new ZipOutputStream(fos);

判断file是否是文件夹,是则File lists[] = file.listFiles() ;找出文件夹下所有文件路径

然后进行遍历:

InputStream input = new FileInputStream(lists[i]);

zos.putNextEntry(new ZipEntry(file.getName()
                    +File.separator+lists[i].getName())) ; 

内容=input.read();

zos.write(内容);

补充:此处只实现文件夹一层压缩,若需多层压缩则结合压缩文件和压缩文件夹进行递归

//文件夹压缩
import java.io.File ;
import java.io.FileInputStream ;
import java.io.InputStream ;
import java.util.zip.ZipEntry ;
import java.util.zip.ZipOutputStream ;
import java.io.FileOutputStream ;
public class MultipleFileZip{
	public static void main(String args[]) throws Exception{	// 所有异常抛出
		File file = new File("c:/temp/multiple") ;	// 定义要压缩的文件夹
		File zipFile = new File("c:/temp/multiple2.zip") ;	// 定义压缩文件名称
		
		InputStream input = null ;	// 定义文件输入流
		ZipOutputStream zipOut = null ;	// 声明压缩流对象
		zipOut = new ZipOutputStream(new FileOutputStream(zipFile)) ;
		zipOut.setComment("multiple file zip") ;	// 设置注释
		
		//开始压缩
		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())) ;	// File.separator为/,设置ZipEntry对象
				System.out.println("正在压缩" + lists[i].getName());
				while((temp=input.read())!=-1){	// 读取内容
					zipOut.write(temp) ;	// 压缩输出
				}
				input.close() ;	// 关闭输入流
			}
		}
		zipOut.close() ;	// 关闭输出流
		System.out.println("multiple file zip done.");
	}
}

解压缩文件:

File zipFile =new File(路径.zip);

FileInputStream fis =new FileInputStream(zipFile);

ZipInputStream zis=new ZipInputStream(fis);

遍历:判断ZipEntry entry =zis.getNextEntry();

{File file =new File(zipFile的上层目录+entry.getName())

判断压缩文件的文件夹是否已经被创建,若未创建,则创建文件夹

OutputStream output = new FileOutputStream(file);

InputStream is =zipFile.getInputStream(entry);

内容=is.read();

output.write(内容);

}

import java.io.File ;  
import java.io.FileInputStream ;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry ;  
import java.util.zip.ZipInputStream ;   
public class SingleFileUnzip{  
    public static void main(String args[]) throws Exception{     
        //待解压文件, 需要从zip文件打开输入流,读取数据到java中
    	File zipFile = new File("c:/temp/single.zip") ;   // 定义压缩文件名称          
        ZipInputStream input = null ;   // 定义压缩输入流  
        input = new ZipInputStream(new FileInputStream(zipFile)) ;  // 实例化ZIpInputStream  
        ZipEntry entry = input.getNextEntry() ; // 得到一个压缩实体  
        System.out.println("压缩实体名称:" + entry.getName()) ;  //获取压缩包中文件名字 
        
        //新建目标文件,需要从目标文件打开输出流,数据从java流入
        File outFile = new File("c:/temp/" + entry.getName());
        OutputStream out = new FileOutputStream(outFile) ;   // 实例化文件输出流  
        int temp = 0 ;  
        while((temp=input.read())!=-1){  
            out.write(temp) ;  
        }  
        input.close() ;     // 关闭输入流  
        out.close() ;   // 关闭输出流
        System.out.println("unzip done.") ;
    }  
}

解压缩文件夹:

File zipFile =new File(路径.zip);

FileInputStream fis =new FileInputStream(zipFile);

ZipinputStream zis=new ZipinputStream(fis);

判断file是否是文件夹,是则File lists[] = file.listFiles() ;找出文件夹下所有文件路径

然后进行遍历:

InputStream input = new FileInputStream(lists[i]);

zos.putNextEntry(new ZipEntry(file.getName()
                    +File.separator+lists[i].getName())) ; 

内容=input.read();

zos.write(内容);

补充:此处只实现文件夹一层压缩,若需多层压缩则结合压缩文件和压缩文件夹进行递归

 

import java.io.File ;  
import java.io.OutputStream ;  
import java.io.InputStream ;  
import java.util.zip.ZipEntry ;  
import java.util.zip.ZipFile ;  
import java.util.zip.ZipInputStream ;  
import java.io.FileInputStream ;  
import java.io.FileOutputStream ;  
public class MultipleFileUnzip{  
    public static void main(String args[]) throws Exception{    
    	//待解压的zip文件,需要在zip文件上构建输入流,读取数据到Java中
        File file = new File("c:/temp/multiple.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("c:/temp/" + entry.getName()) ;   // 定义输出的文件路径  
            if(!outFile.getParentFile().exists()){  // 如果输出文件夹不存在 
                outFile.getParentFile().mkdirs() ;   
                // 创建文件夹 ,如果这里的有多级文件夹不存在,请使用mkdirs()
                // 如果只是单纯的一级文件夹,使用mkdir()就好了
            }  
           /* if(!outFile.exists()){  // 判断输出文件是否存在
            	if(entry.isDirectory())
            	{
            		outFile.mkdirs();
            		System.out.println("create directory...");
            	}
            	else
            	{
            		outFile.createNewFile() ;   // 创建文件
            		System.out.println("create file...");
            	}                  
            }  */
            if(!entry.isDirectory())
            {
            	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() ;  
    }  
}

参考中国大学mooc《JAVA核心技术》

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值