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

原文地址:https://www.cnblogs.com/E-star/p/3446661.html