• Java I/O 文件加锁,压缩


    文件加锁:

    文件加锁机制允许我们同步访问某个作为共享资源的文件。

    public class Test {
    	public static void main(String[] args) throws IOException {
    		FileOutputStream fos = new FileOutputStream("test.txt");
    		/*
    		 * 通过tryLock 或者 lock 获得整个文件的FileLock 
    		 * tryLock(position, size, shared) 对文件进行部分加锁
    		 */
    		FileLock fileLock = fos.getChannel().tryLock();
    		
    		if (fileLock != null) {
    			 System.out.println("Locked file...");
    			 try {
    				TimeUnit.MILLISECONDS.sleep(100);
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			 fileLock.release();
    			 System.out.println("Realased Lock ...");
    		}
    
    	}
    }
    

      

    文件压缩:

    GZIP进行简单的压缩解压:

    public class Test {
    	public static void main(String[] args) throws IOException {
    		BufferedReader in = new BufferedReader(new FileReader("/home/estar/Test/a.java"));
    		BufferedOutputStream bos = new BufferedOutputStream(new GZIPOutputStream(new FileOutputStream("test.gz",true)));
    		
    		System.out.println("GZIP 压缩写入文件 。。。");
    		String s;
    		while ((s = in.readLine()) != null) {
    			s += "
    ";
    			bos.write(s.getBytes());
    		}
    		in.close(); bos.close();
    		
    		//InputStreamReader 起到了在字节流与字符流转换的桥梁。。。
    		System.out.println("GZIP 解压读取文件。。。。");
    		BufferedReader br = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream("test.gz"))));
    		while ((s = br.readLine()) != null) {
    			System.out.println(s);
    		}
    	}
    }
    
    输出:
    GZIP 压缩写入文件 。。。
    GZIP 解压读取文件。。。。
    AAHJKHJKAAHJKHJKAAHJKHJKnixingAAHJKHJKAAHJKHJKAAHJKHJKnixingAAHJKHJKAAHJKHJK
    AAHJKHJKnixing
    AAHJKHJKAAHJKHJK
    AAHJKHJKnixing
    AAHJKHJKAAHJKHJK
    AAHJKHJKnixing
    AAHJKHJKAAHJKHJK
    AAHJKHJKnixing
    

      

    ZIP进行多文件保存:

    public class Test {
    	//这里保存要压缩的文件路径
    	public static String[] path = {"/home/estar/Test/a.java","/home/estar/Test/b.java","/home/estar/cbian/yyy/main.cpp"};
    	public static void main(String[] args) throws IOException {
    		FileOutputStream fos = new FileOutputStream("test.zip");
    		CheckedOutputStream cos = new CheckedOutputStream(fos, new Adler32());
    		ZipOutputStream zos = new ZipOutputStream(cos);
    		BufferedOutputStream bos = new BufferedOutputStream(zos);
    		
    		for (String p : path) {
    			//通过ZipEntry 将要压缩的文件的写入压缩文件test.zip
    			zos.putNextEntry(new ZipEntry(p));
    			
    			//读出每个要压缩的文件的信息,
    			BufferedReader br = new BufferedReader(new FileReader(p));
    			String s;
    			while ((s = br.readLine()) != null) {
    				System.out.println("from " + p + "content : " + s);
    				s += "
    ";
    				bos.write(s.getBytes());
    			}
    			br.close();
    			bos.flush();
    		}
    		bos.close();
    		
    		System.out.println("Checksum : " + cos.getChecksum().getValue());
    		
    		
    		//读压缩文件
    		System.out.println("Reading file");
    		FileInputStream fis = new FileInputStream("test.zip");
    		CheckedInputStream cis = new CheckedInputStream(fis, new Adler32());
    		ZipInputStream zis = new ZipInputStream(cis);
    		BufferedReader br = new BufferedReader(new InputStreamReader(zis));
    		
    		ZipEntry ze;
    		while ((ze = zis.getNextEntry()) != null) {
    			System.out.println("reading ze : " + ze);
    			String s;
    			while ((s = br.readLine()) != null) {
    				System.out.println(s);
    			}
    		}
    		System.out.println("Checksum : " + cis.getChecksum().getValue());
    		
    		ZipFile zf = new ZipFile("test.zip");
    		Enumeration e = zf.entries();
    		while (e.hasMoreElements()){
    			ZipEntry ze1 = (ZipEntry)e.nextElement();
    			System.out.println("ze1 : " + ze1);
    		}
    		
    	}
    }
    

      

    Java编程思想P566

  • 相关阅读:
    CENTOS安装部署zabbix
    分解XML方法
    Git使用摘要
    POJ 1274 The Perfect Stall 水二分匹配
    [leetcode]Pascal's Triangle II
    swift学习笔记(六)析关闭过程和使用分配给属性的默认值
    Qt学习一门:直接使用QT具
    mybatis13 resultMap
    mybatis12 Usermapper.xml
    mybatis11 sqlMapConfig.xml文件说明
  • 原文地址:https://www.cnblogs.com/E-star/p/3446661.html
Copyright © 2020-2023  润新知